You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes切换containerd后日志前缀问题及FluentBit处理咨询

解决方案:去除containerd日志前缀并保留应用原生日志

一、能否让containerd不添加日志前缀?

不行。containerd作为Kubernetes CRI兼容的容器运行时,必须遵循CRI日志格式规范,这类包含时间戳、流类型、日志标记的前缀是CRI要求的元数据,无法通过配置直接关闭。因此只能通过日志收集工具(如你正在使用的FluentBit)过滤或解析掉这些前缀。

二、用FluentBit去除containerd日志前缀的方法

你可以通过FluentBit的parser组件,提取出应用的原始日志内容,以下是具体配置示例:

1. 定义CRI日志解析规则

在FluentBit配置文件中添加一个适配containerd日志格式的parser:

[PARSER]
    Name        cri_containerd
    Format      regex
    # 正则匹配containerd日志前缀,提取时间、流类型、标记和原始日志内容
    Regex       ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%LZ
    Time_Keep   Off  # 解析后丢弃原始时间字段,用提取的标准时间字段替换

2. 在输入阶段直接解析(推荐)

如果使用tail插件收集容器日志,可直接在INPUT配置中指定上述parser,同时结合你已有的多行日志解析规则:

[INPUT]
    Name        tail
    Path        /var/log/containers/*.log
    Tag         kube.*
    # 先解析CRI前缀,提取原始日志
    Parser      cri_containerd
    # 再应用你已配置好的多行日志解析规则(替换为你的多行parser名称)
    Parser_Multiline  your_existing_multiline_parser

3. 用Filter阶段补充解析

如果已有现成的INPUT配置,可添加parser过滤器来处理日志:

[FILTER]
    Name        parser
    Match       kube.*  # 匹配你的日志Tag
    Parser      cri_containerd
    Key_Name    log     # 指定要解析的字段(默认是log)
    Reserve_Data Off    # 只保留解析后的字段,丢弃原始带前缀的log字段

4. 多行日志处理顺序说明

确保CRI前缀解析在多行合并之前执行,这样FluentBit会先提取出纯净的应用日志内容,再进行多行日志的合并处理,避免前缀干扰多行匹配逻辑。

配置完成后重启FluentBit服务,Grafana即可展示不带containerd前缀的应用原生日志。

内容的提问来源于stack exchange,提问作者k.elgohary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:03:20