云原生日志流水线:Filebeat Helm化部署避坑指南

在云原生环境中,日志收集是保障系统可观测性的重要环节。本文将手把手教你通过Helm Chart部署Filebeat,实现Kubernetes容器日志的自动化采集与Kafka投递。

图片


一、环境准备

  1. 已部署的Kubernetes集群(v1.18+)

  2. Helm包管理器(v3.0+)

  3. Kafka集群(作为日志接收端)

  4. 私有镜像仓库(用于存储自定义镜像)


二、Chart包管理


2.1 获取官方Chart

$ helm repo add elastic https://helm.elastic.co --force-update
"elastic" has been added to your repositories

$ helm pull elastic/filebeat --version 7.17.3


2.2 推送至私有仓库

$ helm push filebeat-7.17.3.tgz oci://core.jiaxzeng.com/plugins
Pushed: core.jiaxzeng.com/plugins/filebeat:7.17.3
Digest: sha256:76778389d4c793b414d392e9283851b7356feec9619dd37f0b7272c8ce42bf01


2.3 本地加载Chart

$ sudo helm pull oci://core.jiaxzeng.com/plugins/filebeat --version 7.17.3 --untar --untardir /etc/kubernetes/addons/
Pulled: core.jiaxzeng.com/plugins/filebeat:7.17.3
Digest: sha256:76778389d4c793b414d392e9283851b7356feec9619dd37f0b7272c8ce42bf01


三、核心配置解析


3.1 DaemonSet配置

daemonset:
  enabled:true
resources:
    requests:
      cpu:"100m"
      memory:"100Mi"
    limits:
      cpu:"1000m"
      memory:"200Mi"

必须使用DaemonSet确保每个节点运行实例


3.2 日志采集配置

      filebeat.inputs:
      -type:container
        paths:
          -/var/log/containers/*.log
        fields:# 自定义额外日志字段,用于发送到kafka不同topic中
          type:k8s_logs
        processors:
        -add_kubernetes_metadata:# 自动注入K8s元数据
            host:${NODE_NAME}
            matchers:
            -logs_path:
                logs_path:"/var/log/containers/"
      -type:log
        fields:
          type:messages
        paths:
        -/var/log/messages

路径说明:

  1. /var/log/containers/*.log:Kubelet生成的容器标准输出日志

  2. /var/log/messages:系统级日志(需确保节点路径存在)


3.3 Kafka输出配置

      output.kafka:
        hosts:["172.139.20.17:9092","172.139.20.81:9092","172.139.20.177:9092"]
        # 根据不同自定义字段,区分不同的topic
        topics:
        -topic:'k8s_logs'
          when.equals:
            fields.type:k8s_logs
        -topic:'messages'
          when.equals:
            fields.type:messages
        partition.round_robin:# 轮询
          reachable_only:true
        required_acks:1# Kafka确认机制
        compression:gzip# 节省带宽消耗
        max_message_bytes:1000000# 控制单条日志大小


3.4 全量配置文件

fullnameOverride: "filebeat"
image:"core.jiaxzeng.com/library/filebeat"
hostPathRoot:/var/lib
tolerations:
-effect:NoSchedule
operator:Exists

daemonset:
enabled:true
resources:
    requests:
      cpu:"100m"
      memory:"100Mi"
    limits:
      cpu:"1000m"
      memory:"200Mi"

filebeatConfig:
    filebeat.yml:|
      # logging.level: debug
      filebeat.inputs:
      - type: container
        paths:
          - /var/log/containers/*.log
        fields:
          type: k8s_logs
        processors:
        - add_kubernetes_metadata:
            host: ${NODE_NAME}
            matchers:
            - logs_path:
                logs_path: "/var/log/containers/"
      - type: log
        enabled: true
        fields:
          type: messages
        paths:
        - /var/log/messages

      output.kafka:
        hosts:["172.139.20.17:9092","172.139.20.81:9092","172.139.20.177:9092"]
        topics:
        -topic:'k8s_logs'
          when.equals:
            fields.type:k8s_logs
        -topic:'messages'
          when.equals:
            fields.type:messages
        partition.round_robin:
          reachable_only:true
        required_acks:1
        compression:gzip
        max_message_bytes:1000000


四、部署实施


4.1 执行安装命令

$ helm -n obs-system install filebeat -f /etc/kubernetes/addons/filebeat-values.yaml /etc/kubernetes/addons/filebeat


4.2 验证DaemonSet状态

$ kubectl -n obs-system get pods -l app=filebeat -o wide
NAME             READY   STATUS    RESTARTS      AGE   IP               NODE           NOMINATED NODE   READINESS GATES
filebeat-6swzf   1/1     Running   1 (69m ago)   8h    10.244.217.116   k8s-node04     <none>           <none>
filebeat-dkp8q   1/1     Running   1 (70m ago)   8h    10.244.135.150   k8s-node03     <none>           <none>
filebeat-htpf6   1/1     Running   1 (70m ago)   8h    10.244.122.132   k8s-master02   <none>           <none>
filebeat-qm84m   1/1     Running   1 (70m ago)   8h    10.244.85.232    k8s-node01     <none>           <none>
filebeat-t7vf4   1/1     Running   1 (70m ago)   8h    10.244.32.132    k8s-master01   <none>           <none>
filebeat-vkbbk   1/1     Running   1 (70m ago)   8h    10.244.195.5     k8s-master03   <none>           <none>
filebeat-z6k2v   1/1     Running   1 (70m ago)   8h    10.244.58.198    k8s-node02     <none>           <none>


五、数据验证


5.1 检查Kafka消费端

$ ./kafka-get-offsets.sh --bootstrap-server 172.139.20.17:9092 --topic k8s_logs  
k8s_logs:0:296025
k8s_logs:1:297971
k8s_logs:2:297818
k8s_logs:3:296924
k8s_logs:4:296992
k8s_logs:5:297129


六、结语

掌握容器化 Helm 部署 FileBeat 的方法,无疑为你的数据处理工作增添强大助力,快去实践,开启高效数据之旅吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bryan Ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值