filebeat 采集k8s 中nginx deployment 日志

一、背景

在k8s集群中,已经部署了nginx应用,需要使用elk来收集日志。

注意:elk并没有放在k8s集群中,使用单独的服务器进行安装。不推荐elk放在k8s集群中!

其中filebeat,使用DaemonSet方式部署,这样就可以自动收集了。

二、环境说明

操作系统:centos 7.6

k8s版本:1.18.1

ip地址:10.212.82.63

配置:2核4g

主机名:k8s-master

操作系统:centos 7.6

k8s版本:1.18.1

ip地址:10.212.82.65

配置:2核4g

主机名:k8s-node01

日志说明

nginx容器,默认的日志路径为:/var/log/nginx,所以在部署时,我会将此目录映射到宿主机的/opt/log/nginx目录(日志格式需要为json)

部署filebeat时,需要将/opt/log/nginx目录挂载到filebeat容器中,这样才能读取nginx日志。

elk

本文使用elk版本,统一采用7.5.1

由于资源紧张,我这里演示效果,在 k8s-node01 部署elk。在实际生产环境中,请单独部署。

关于elasticsearch和head插件安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/13565468.html

关于logstash安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/13565790.html

关于kibana安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/13570301.html

请确保elk工作正常,kibana能看到 logstash收集到的/var/log/messages日志信息。

nginx

登录到主机k8s-node01,创建日志目录

  1. mkdir -p /opt/log/nginx

登录到主机k8s-master,部署nginx

新建文件 nginx-deployment.yaml,内容如下:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-1
  5. spec:
  6. selector:
  7. matchLabels:
  8. run: nginx-1
  9. replicas: 1
  10. template:
  11. metadata:
  12. labels:
  13. run: nginx-1
  14. spec:
  15. containers:
  16. - name: nginx-1
  17. image: nginx:stable-alpine
  18. ports:
  19. - containerPort: 80
  20. volumeMounts:
  21. - mountPath: /var/log/nginx
  22. name: nginx-log
  23. restartPolicy: Always
  24. volumes:
  25. - name: nginx-log
  26. hostPath:
  27. path: /opt/log/nginx

新建文件 nginx-service.yaml,内容如下:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-1
  5. labels:
  6. run: nginx-1
  7. spec:
  8. type: NodePort
  9. ports:
  10. - port: 80
  11. name: nginx-port
  12. targetPort: 80
  13. protocol: TCP
  14. nodePort: 30008
  15. selector:
  16. run: nginx-1

开始正式部署

  1. kubectl apply -f nginx-service.yaml
  2. kubectl apply -f nginx-deployment.yaml

filebeat

filebeat的镜像,需要在官方的基础上,做一次封装。因为配置文件,需要调整一下。由于资源紧张,这里并没有使用私有仓库harbor或者云产商的私有仓库,直接使用本地存储。

登录到主机k8s-node01,新建目录,并创建dockerfile

  1. mkdir -p /opt/filebeat
  2. cd /opt/filebeat
  3. vi dockerfile

内容如下:

  1. FROM elastic/filebeat:7.5.1
  2. ADD filebeat.yml /usr/share/filebeat/filebeat.yml

新建文件filebeat.yml,内容如下:

  1. # 收集系统日志
  2. filebeat.inputs:
  3. - type: log
  4. enabled: true
  5. paths:
  6. - /opt/log/nginx/access.log
  7. fields:
  8. log_source: nginx-access
  9. - type: log
  10. enabled: true
  11. paths:
  12. - /opt/log/nginx/error.log
  13. fields:
  14. log_source: nginx-error
  15. filebeat.config:
  16. modules:
  17. path: ${path.config}/modules.d/*.yml
  18. reload.enabled: false
  19. processors:
  20. - add_cloud_metadata: ~
  21. - add_docker_metadata: ~
  22. output.elasticsearch:
  23. hosts: '10.212.82.65:9200'
  24. indices:
  25. - index: "filebeat-nginx-%{+yyyy.MM.dd}"

说明:

这里是读取2个日志文件,分别是access.log和error.log。然后将内容输出到elasticsearch

请根据实际情况修改!

生成镜像

  1. docker build -t my-filebeat:v1 .

登录主机k8s-master,新建filebeat.yaml,内容如下:

  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4. name: filebeat-1
  5. spec:
  6. selector:
  7. matchLabels:
  8. run: filebeat-1
  9. template:
  10. metadata:
  11. labels:
  12. run: filebeat-1
  13. spec:
  14. containers:
  15. - name: filebeat-1
  16. image: my-filebeat:v1
  17. imagePullPolicy: IfNotPresent
  18. volumeMounts:
  19. - mountPath: /opt/log
  20. name: log
  21. restartPolicy: Always
  22. volumes:
  23. - name: log
  24. hostPath:
  25. path: /opt/log

注意:这里采用DaemonSet方式部署,必须挂载目录/opt/log,否则无法读取。

正式部署

复制代码
    • kubectl apply -f filebeat.yaml

访问elasticsearch head插件,查看filebeat索引是否存在

登录kibana,新建索引filebeat

索引名称为:filebeat-nginx-*

添加索引之后,返回主页面

点击change,切换索引到filebeat-nginx-*,然后刷新几遍nginx访问页面,效果如下:

相关推荐
J2虾虾1 天前
Spring AI Alibaba文档
java·人工智能·spring
YikNjy1 天前
break和continue
java·开发语言·算法
SomeOtherTime1 天前
Geojson相关(AI回答)
java·前端·python
日月云棠1 天前
10 Integer —— 最常用的整数包装类深度解析
java·后端
秋91 天前
java项目中cpu飙升排查及解决方法
java·开发语言
野生技术架构师1 天前
牛客网2026最新大厂Java高频面试题精选(附标准答案)
java·开发语言
PH = 71 天前
JAVA的SPI机制
java·开发语言
一 乐1 天前
高校实习信息发布网站|基于Spring Boot的高校实习信息发布网站的设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·高校实习信息发布网站
weelinking1 天前
【产品】11_实现后端接口——数据在背后如何流动
java·人工智能·python·sql·oracle·json·ai编程
摇滚侠1 天前
东方通替换tomcat,实战经验
java