filebeat 采集k8s istio-proxy容器日志发送到kafka
filebeat 采集k8s istio-proxy容器日志发送到kafka
背景
我想采集一个pod内,istio-proxy的容器,它是自动注入的
部署filebeat Daemonset
以daemonset的方式部署filebeat,通过修改configmap控制filebeat采集日志,可以根据namespace,pod,container的名称筛选是否采集,也可以满足我们的开发需求
vim daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat-daemonset #指定daemonset的名字
namespace: dev-book #指定namespace
spec:
selector:
matchLabels:
app: filebeat
template:
metadata:
labels:
app: filebeat
spec:
containers:
- name: filebeat #指定容器的名字
image: docker.elastic.co/beats/filebeat:7.13.2
volumeMounts:
- name: config #读取configmap,配置文件外挂configmap
mountPath: /usr/share/filebeat/filebeat.yml
subPath: filebeat.yml
- name: varlogcontainers
mountPath: /var/log/pods
readOnly: true
- name: varlogpods
mountPath: /var/lib/docker/containers
readOnly: true
securityContext:
runAsUser: 1000
privileged: false
resources:
requests:
cpu: 100m
memory: 200Mi
limits:
cpu: 500m
memory: 500Mi
volumes:
- name: config
configMap:
name: filebeat-config
- name: varlogcontainers
hostPath:
path: /var/log/pods #把node节点的文件夹挂载到容器
type: DirectoryOrCreate
- name: varlogpods
hostPath:
path: /var/lib/docker/containers #我们上面把文件夹挂载到容器,但是filebeat采集不到,需要把真实的文件路径也挂载进去, /var/lib/docker/containers是我在ls /var/log/pods后,找到的真实文件地址
type: DirectoryOrCreate
filebeat配置 Configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
namespace: dev-book
data:
filebeat.yml: |
filebeat.inputs:
- type: log
stream: stdout
enable: true
symlinks: true #因为/var/log/pods下的文件都是软连接,无法读取,需要加这个,让他找到真实文件内容并读取。我遇到这个问题了,后来把真实文件的路径也通过上面的hostpath挂载进去就可以了,不知道这里是不是生效的,后面有机会测试性爱
paths:
- '/var/log/pods/istio-system_istio-ingressgateway-*/istio-proxy/*.log' #挂载到容器后的日志,通过正则选istio-system命名空间下istio-ingressgateway这个pod的istio-proxy容器日志
processors:
- drop_fields: #转发到kafka后,带了一堆干扰信息,我不想要,都去掉。'@timestamp', "@metadata"是原数据,虽然写了但还是删不掉。
fields: ['@timestamp', "@metadata","stream","time", "agent", "ecs", "host", "input", "log", "tags"]
output.kafka:
hosts: ["192.168.10.26:9092"] #在这之前我部署了一个kafka集群,部署可以看我的kafka专栏
topic: "kafka-envoy" #提前创建的一个topic,怎么创建请看我的kafka专栏
验证
启动后,可以通过kafka的消费者消费信息,一边刷新页面,一边查看消费者是否有从topic收到新的消息
kafka-console-consumer.sh --bootstrap-server 192.168.10.26:9092 --topic kafka-envoy --from-beginning
可以看到消费者可以获取到了
分类:
filebeat
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器