【可观测性实战】CCE无侵入式日志采集:基于DaemonSet与Fluent Bit的工程化解法

举报
yd_271832976 发表于 2026/10/14 00:11:26 2026/10/14
【摘要】 针对云容器引擎(CCE)中微服务日志分散、容器重启易导致标准输出(stdout)丢失的痛点,本文提供一套基于 DaemonSet 模式部署 Fluent Bit 的轻量级工程解法,以极低的 CPU/内存损耗实现千万级日志日志的高效汇聚与自动流转。

在 K8s/CCE 环境下,传统的在每个微服务 Pod 内塞入一个 Logstash 或 Filebeat Sidecar 容器的做法,不仅侵入性极强,还会导致节点资源(尤其是内存)被采集组件急剧消耗。标准的云原生工程解法是:采用“每节点单一代理(Node-Level Logging Agent)”架构,使用轻量级的 Fluent Bit 抓取宿主机容器运行时的底层日志。

1. 声明式挂载宿主机容器日志目录

通过 DaemonSet 确保 CCE 集群每个 Node 节点只运行一个 Fluent Bit 实例。在 YAML 配置中,必须将宿主机的 /var/log/containers 及其软链接的底层物理路径以只读模式挂载入采集容器:

YAML
      containers:
      - name: fluent-bit
        image: fluent/fluent-bit:2.1
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

2. 构建 Pipeline 采集与元数据注入管线

通过 ConfigMap 注入 fluent-bit.conf 配置,利用内置的 kubernetes 过滤器,Fluent Bit 会在抓取文本的同时,自动调用 APIServer 追加相关的 Pod 名称、Namespace 及 Labels 标签:

Ini, TOML
[INPUT]
    Name              tail
    Tag               kube.*
    # 抓取宿主机上所有容器的标准输出
    Path              /var/log/containers/*.log
    Parser            docker
    DB                /var/log/flb_kube.db
    Mem_Buf_Limit     50MB

[FILTER]
    Name              kubernetes
    Match             kube.*
    # 自动解析关联的 K8s 元数据标签
    Kube_URL          https://kubernetes.default.svc:443
    Merge_Log         On

[OUTPUT]
    Name              http
    Match             *
    # 将格式化后的 JSON 日志推送到外部 ES 或云日志服务(LTS)网关
    Host              log-gateway.myhuaweicloud.com
    Port              9200
    Format            json

3. 配置严格的内存阈值防 OOM

日志组件绝不能抢占业务算力。必须在 Fluent Bit 容器的资源清单中配置硬限制,并在采集端点设定 Mem_Buf_Limit (如上述配置中的 50MB),一旦后端写入阻塞,立刻暂停新日志读入,防止内存暴涨。

YAML
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 100Mi

总结:

利用 DaemonSet 配合 C/C++ 编写的 Fluent Bit 替代传统笨重的 Java 系日志采集器,是目前 K8s 体系下性价比最高的日志治理方案。它将日志的生成(业务微服务)与日志的流转(基础设施层)彻底解耦,开发者只需像往常一样向终端(stdout)打印日志,即可在云端控制台完成开箱即用的统一检索与分析。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。