filebeat 采集k8s istio-proxy容器日志发送到kafka

filebeat 采集k8s istio-proxy容器日志发送到kafka

背景

我想采集一个pod内,istio-proxy的容器,它是自动注入的
image

部署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

image

可以看到消费者可以获取到了

posted @   liwenchao1995  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示