如何移除Fluent-Bit发送至Slack日志中的timestamp字段?
解决Fluent-Bit发送Slack日志时自动添加timestamp字段的问题
问题说明
在搭载CRI运行时的K8s集群中部署Fluent-Bit,将容器日志转发到Slack频道时,Slack收到的日志会自动带上timestamp字段(格式类似1681315742.016981904),且日志内容被封装在log字段中,尝试多种Filter和Parser配置都无法移除这个自动添加的timestamp。
解决方案
要解决这个问题,需要从过滤字段和日志解析两个环节调整配置,同时优化Slack输出的格式:
1. 添加Modify过滤器删除timestamp字段
Fluent-Bit的Slack输出插件默认会自动注入timestamp字段,我们可以用modify过滤器显式移除它。
修改filter-kubernetes.conf,添加以下配置:
[FILTER] Name modify Match * Remove timestamp
2. 修正CRI日志Parser配置
你的Parser存在两个问题:一是名字为cc但Input指定用cri,二是同时设置Format regex和Format cri会导致冲突,另外需要关闭Time_Keep避免保留原始时间字段。
修改parsers.conf为:
[PARSER] Name cri Format regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z Time_Keep Off
Time_Keep Off:解析后不会保留原始的time字段,避免日志中出现重复时间信息- 统一Parser名字为
cri,和Input配置中的Parser cri对应
3. 优化Slack输出格式
默认Slack输出会以JSON数组格式发送,我们可以指定输出为纯文本,并直接引用解析后的message字段,让日志更整洁。
修改output-syslog.conf为:
[OUTPUT] Name slack Match * webhook [你的Slack Webhook链接] Format text Template {{.message}}
Format text:指定输出为纯文本格式Template {{.message}}:直接输出解析后的日志内容(即原始日志里的请求信息)
修改后的完整ConfigMap配置
apiVersion: v1 kind: ConfigMap metadata: name: fluent-bit-config namespace: logging1 labels: k8s-app: fluent-bit data: fluent-bit.conf: | [SERVICE] Flush 2 Log_Level info Daemon off Parsers_File parsers.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 @INCLUDE input-kubernetes.conf @INCLUDE filter-kubernetes.conf @INCLUDE output-syslog.conf input-kubernetes.conf: | [INPUT] Name tail Tag kube.* Path /var/log/containers/* Parser cri DB /var/log/flb_kube.db Mem_Buf_Limit 5MB Skip_Long_Lines On filter-kubernetes.conf: | [FILTER] Name modify Match * Remove timestamp output-syslog.conf: | [OUTPUT] Name slack Match * webhook [你的Slack Webhook链接] Format text Template {{.message}} parsers.conf: | [PARSER] Name cri Format regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z Time_Keep Off
验证结果
应用修改后的ConfigMap并重启Fluent-Bit Pod后,Slack收到的日志会变成原始的容器日志内容:
10.244.0.1 - - [12/Apr/2023 16:09:02] "GET / HTTP/1.1" 200 -
不再包含自动添加的timestamp字段和多余的log封装结构。
内容的提问来源于stack exchange,提问作者Gevegeve
相关产品推荐
相关产品推荐

