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

如何配置Fluent Bit多线解析器匹配固定起止标签日志

解决Fluent Bit解析自定义包裹式多线日志的配置问题

针对你的应用日志以[MY_LOG_START]和[MY_LOG_END]包裹的格式,以下是修正后的多线解析器配置及主配置调整说明:

正确的多线解析器配置

替换你现有的multiline-my-log解析器为以下内容:

[MULTILINE_PARSER]
    name multiline-my-log
    type regex
    flush_timeout 2000

    # 规则 | 状态名       | 正则模式                          | 下一状态
    # ------|--------------|-----------------------------------|---------
    rule      "start_state"   "/^\[MY_LOG_START\]/"         "cont"
    rule      "cont"          "/^(?!.*\[MY_LOG_END\])/"    "cont"
    rule      "cont"          "/.*\[MY_LOG_END\]$/"         "start_state"

配置逻辑说明

  • 第一条规则:匹配以[MY_LOG_START]开头的行,作为单条日志的起始,切换到cont状态开始收集后续行。
  • 第二条规则:在cont状态下,所有**不包含[MY_LOG_END]**的行都属于当前日志的一部分,保持cont状态继续合并。这里的负向前瞻正则^(?!.*\[MY_LOG_END\])会判断行内是否存在结束标签,不会吞掉整行内容。
  • 第三条规则:匹配到包含[MY_LOG_END]的行时,将其合并到当前日志,然后切换回start_state,等待下一条日志的起始行。

主配置验证与调整

你的现有主配置逻辑是正确的(先处理CRI格式,再处理应用层多线),可以保持不变,但注意两点:

  1. 确保multiline.key_content log指定的字段是CRI解析后日志内容所在的字段(默认就是log,无需修改)。
  2. 若日志生成间隔较长,可适当调大flush_timeout(比如改为5000),避免未收集到结束行时过早拆分日志。

验证时,查看/var/lib/docker/containers下的输出文件,确认多行日志已被正确合并为单条,且包含完整的[MY_LOG_START]到[MY_LOG_END]内容。

内容的提问来源于stack exchange,提问作者xeonman9000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:13:18