如何配置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格式,再处理应用层多线),可以保持不变,但注意两点:
- 确保
multiline.key_content log指定的字段是CRI解析后日志内容所在的字段(默认就是log,无需修改)。 - 若日志生成间隔较长,可适当调大
flush_timeout(比如改为5000),避免未收集到结束行时过早拆分日志。
验证时,查看/var/lib/docker/containers下的输出文件,确认多行日志已被正确合并为单条,且包含完整的[MY_LOG_START]到[MY_LOG_END]内容。
内容的提问来源于stack exchange,提问作者xeonman9000
相关产品推荐
相关产品推荐

