ELK日志收集--收集k8s集群中以pod方式运行的应用日志
文章目录
- 前言
- 环境
- 一、准备tomcat数据目录
- 二、编写tomcat应用资源清单文件
- 三、编写logstash配置文件
- 四、应用tomcat资源清单文件
- 五、验证Pod 中tomcat及filebeat是否正常
- 六、再kiana页面中添加索引
前言
Filebeat+ELK的构建与解释参考
链接: k8s学习–基于k8s的ELK日志收集的详细过程
本章不再重复描述
环境
虚拟机
Ip 主机名 cpu 内存 硬盘 192.168.10.11 master01 2cpu双核 4G 100G 192.168.10.12 worker01 2cpu双核 4G 100G 192.168.10.13 worker02 2cpu双核 4G 100G 192.168.10.17 ELK 1cpu双核 4G 100G 版本 centos7.9
已部署k8s-1.27
ELK服务器已部署Filebeat+ELK
通过在应用程序Pod中运行filebeat(sidecar边车)实现,本次将以tomcat为例进行说明。
一、准备tomcat数据目录
默认tomcat容器中没有网站首页文件,不添加会导致pod中容器无法正常运行。
work01主机操作
mkdir /opt/tomcatwebroot echo "tomcat is running" > /opt/tomcatwebroot/index.html
二、编写tomcat应用资源清单文件
master主机操作
vim tomcat-logs.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-demo namespace: default spec: replicas: 2 selector: matchLabels: project: www app: tomcat-demo template: metadata: labels: project: www app: tomcat-demo spec: nodeName: worker01 containers: - name: tomcat image: tomcat:latest imagePullPolicy: IfNotPresent ports: - containerPort: 8080 name: web protocol: TCP resources: requests: cpu: 0.5 memory: 500Mi limits: cpu: 1 memory: 1Gi livenessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 60 timeoutSeconds: 20 readinessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 60 timeoutSeconds: 20 volumeMounts: - name: tomcat-logs mountPath: /usr/local/tomcat/logs - name: tomcatwebroot mountPath: /usr/local/tomcat/webapps/ROOT - name: filebeat image: docker.io/elastic/filebeat:7.17.2 imagePullPolicy: IfNotPresent args: [ "-c", "/etc/filebeat.yml", "-e", ] resources: limits: memory: 500Mi requests: cpu: 100m memory: 100Mi securityContext: runAsUser: 0 volumeMounts: - name: filebeat-config mountPath: /etc/filebeat.yml subPath: filebeat.yml - name: tomcat-logs mountPath: /usr/local/tomcat/logs volumes: - name: tomcat-logs emptyDir: {} - name: tomcatwebroot hostPath: path: /opt/tomcatwebroot type: Directory - name: filebeat-config configMap: name: filebeat-config --- apiVersion: v1 kind: ConfigMap metadata: name: filebeat-config namespace: default data: filebeat.yml: |- filebeat.inputs: - type: log paths: - /usr/local/tomcat/logs/catalina.* fields: app: www type: tomcat-catalina fields_under_root: true multiline: pattern: '^\[' negate: true match: after setup.ilm.enabled: false setup.template.name: "tomcat-catalina" setup.template.pattern: "tomcat-catalina-*" output.logstash: hosts: ['192.168.10.17:5056']
这个yaml定义了一个 Tomcat 和 Filebeat 的 Deployment 以及 Filebeat 的配置文件,让我们依次解释一下
部署文件 (Deployment)部分
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-demo namespace: default spec: replicas: 2 selector: matchLabels: project: www app: tomcat-demo template: metadata: labels: project: www app: tomcat-demo spec: nodeName: worker01 containers: - name: tomcat image: tomcat:latest imagePullPolicy: IfNotPresent ports: - containerPort: 8080 name: web protocol: TCP resources: requests: cpu: 0.5 memory: 500Mi limits: cpu: 1 memory: 1Gi livenessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 60 timeoutSeconds: 20 readinessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 60 timeoutSeconds: 20 volumeMounts: - name: tomcat-logs mountPath: /usr/local/tomcat/logs - name: tomcatwebroot mountPath: /usr/local/tomcat/webapps/ROOT - name: filebeat image: docker.io/elastic/filebeat:7.17.2 imagePullPolicy: IfNotPresent args: [ "-c", "/etc/filebeat.yml", "-e", ] resources: limits: memory: 500Mi requests: cpu: 100m memory: 100Mi securityContext: runAsUser: 0 volumeMounts: - name: filebeat-config mountPath: /etc/filebeat.yml subPath: filebeat.yml - name: tomcat-logs mountPath: /usr/local/tomcat/logs volumes: - name: tomcat-logs emptyDir: {} - name: tomcatwebroot hostPath: path: /opt/tomcatwebroot type: Directory - name: filebeat-config configMap: name: filebeat-config
metadata: 定义了 Deployment 的名称和命名空间。
spec: 包含 Deployment 的详细规范。
replicas: 指定了副本数量,即运行两个 Tomcat 实例。
selector: 定义了选择器,用于匹配 Pod 标签。
template: 描述了 Pod 模板,包括 metadata 和 spec。
nodeName: 指定了 Pod 运行的节点名称(worker01)。
containers: 定义了两个容器:Tomcat 和 Filebeat。
Tomcat 容器:
image: 使用 tomcat:latest 镜像。
ports: 暴露 8080 端口。
resources: 定义了资源请求和限制。
livenessProbe 和 readinessProbe: 用于健康检查。
volumeMounts: 挂载了两个卷。
Filebeat 容器:
image: 使用 filebeat:7.17.2 镜像。
args: 指定了启动参数。
resources: 定义了资源请求和限制。
securityContext: 以 root 用户运行。
volumeMounts: 挂载了两个卷。
volumes:
tomcat-logs: 使用 emptyDir 卷。
tomcatwebroot: 使用 hostPath 卷。
filebeat-config: 使用 ConfigMap 卷。
配置文件 (ConfigMap)部分
apiVersion: v1 kind: ConfigMap metadata: name: filebeat-config
解释
metadata: 定义了 ConfigMap 的名称。
data: 应包含 Filebeat 的配置内容(在此省略)。
三、编写logstash配置文件
elk主机配置
编写logstash配置文件,不影响以往配置文件
vim /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf
input { beats { host => "0.0.0.0" port => "5056" } } filter { } output { elasticsearch { hosts => "192.168.10.17:9200" index => "tomcat-catalina-%{+yyyy.MM.dd}" } }
运行
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf --path.data /usr/share/logstash/data3 &
验证端口是否启动
ss -anput | grep ":5056"
四、应用tomcat资源清单文件
master主机操作
kubectl apply -f tomcat-logs.yaml
等一会因为需要下载镜像
然后查看pod
注:需要vpn
kubectl get deployment.apps kubectl get pods
五、验证Pod 中tomcat及filebeat是否正常
查看tomcat产生日志 (-c: container)
查看filebeat收集日志
kubectl logs tomcat-demo-664584f857-k8whd -c filebeat
六、再kiana页面中添加索引
宿主机浏览器访问
192.168.10.17:5601
可以看到已经看到日志了
完成
如果对您有帮助可以点下关注