在K8S里使用filebeat作为sidecar收集nginx日志
简介
通过sidecar方法进行接入,与提供日志的容器部署在同一个pod里,主要是配置statefulset里的containers和configmap里的filebeat.yaml
1.把nginx的日志文件挂载在access_log这个volume里,同时在filebeat这个pod里也挂载access_log这个volume
2.filebeat通过subpath的方法挂载单独一个filebeat.yml到/usr/share/filebeat/filebeat.yml。注意,如果不用subpath挂载单个文件的话,是会覆盖掉/usr/share/filebeat/目录的
3.configmap里设置elasticsearch的地址和index,指定日志文件
statefulset.yaml
containers:
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
volumeMounts:
- name: access-log #日志同时挂载在nginx和filebeat中
mountPath: /var/log/nginx/
- image: docker.elastic.co/beats/filebeat:6.8.12
imagePullPolicy: Always
name: filebeat
volumeMounts:
- name: access-log #日志同时挂载在nginx和filebeat中
mountPath: /log
- name: filebeat-config
mountPath: /usr/share/filebeat/filebeat.yml
subPath: filebeat.yml
volumes:
- name: filebeat-config
configMap:
name: filebeat-config
items:
- key: filebeat.yml
path: filebeat.yml
configmap.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
data:
filebeat.yml: |
filebeat.inputs:
- type: log
paths:
- "/log/access.log"
setup.template.name: "filebeat"
setup.template.pattern: "filebeat-*"
output.elasticsearch:
hosts: ["{{ .Values.elastricsearch.addr }}"]
index: "frontend-filebeat"