Fluentd 日志截断问题

某些日志行内容过长,fluentd 在采集时会将其拆分成多个 message,最终在 Kibana/Loki 等平台中呈现为被截断的日志。

fluentd 提供的 concat 插件可以根据日志的起始标记判断哪些 message 属于同一条日志,并将其自动合并。

以下面的日志为例,可以看到每行日志都是以时间戳开头,格式为 <时间戳>|<trace_id>|<trace_id>|Trace|...

1
2025-06-06T09:47:13.3580365+08:00|4f51c5b1-49fc-4796-a026-c4b56fd8e72c|4f51c5b1-49fc-4796-a026-c4b56fd8e72c|Trace|Request|...

那么就可以用下面的正则表达式进行匹配:

1
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+\+\d{2}:\d{2}\|

匹配效果如下:

通过上面的正则表达式,就可以在对应的 Flow 或 ClusterFlow 的 spec.filters 中添加 concat 配置:

1
2
3
4
5
spec:
filters:
- concat:
multiline_start_regexp: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+\+\d{2}:\d{2}\|/
separator: ''

等待 fluentd 加载新配置后,在 Kibana 就可以看到新的 message 已经不会被截断:

Author

Warner Chen

Posted on

2025-06-06

Updated on

2026-03-05

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.