如何配置Fluent Bit 1.9.8解析Log4J2多行日志?
Log4J2多行日志的Fluent Bit 1.9.8多行解析器配置问题
我的Log4J2日志格式配置如下:
%d [%20.20t] [%10.10X{nthread}] [%20.20X{tid}] [%20.20X{app}] (%30.30c{3}) %-5p %X{stack} %X{rid} %X{uid} - %m%n
已编写可用的单日志行解析正则:
(?<timestamp>[\d-]+ [\d:,]+) \[\s*(?<thread>[^\]]+)?\] \[\s*(?<nthread>[^\]]+)?\] \[\s*(?<tid>[^\]]+)?\] \[\s*(?<app>[^\]]+)?\] \(\s*(?<logger>[^\]]+)?\) (?<level>\S+) (?<stack>[^-]+) - (?<message>.*)
现在要为Fluent Bit 1.9.8配置多行解析器,当前配置框架如下:
[MULTILINE_PARSER] Name custom_app_default Type regex # # rules | state name | regex pattern | next state # --------|----------------| ------------------------|----------- rule "start_state" "/([\d-]+ [\d:,]+)/" "cont" rule "cont" {CONFUSED_PART_HERE} "cont"
尝试用前瞻正则/^(?![\d-]+ [\d:,]+)/匹配非日期开头的行,但未成功。输入的tail插件配置如下:
[INPUT] Name tail Path /opt/log-mount/**/CustomApp_CORE.log Path_Key filename Multiline.Parser custom_app_default Mem_Buf_Limit 5MB Skip_Long_Lines Off Refresh_Interval 10 [INPUT] Name tail Path /opt/log-mount/**/CustomApp_ALERTS.log Path_Key filename Multiline.Parser custom_app_default Mem_Buf_Limit 5MB Skip_Long_Lines Off Refresh_Interval 10
请问如何正确配置多行解析器,将下一个日期格式之前的所有内容合并为单条日志?
解决方案
Fluent Bit的多行正则解析器有几个关键注意点:
- 正则模式无需用
/包裹,直接写表达式内容即可 - 规则是匹配整行内容,必须覆盖行的全部内容
- 否定前瞻的写法需要结合行首锚点,确保逻辑准确
正确的多行解析器配置如下:
[MULTILINE_PARSER] Name custom_app_default Type regex # # rules | state name | regex pattern | next state # --------|----------------| ------------------------|----------- rule "start_state" "^([\d-]+ [\d:,]+)" "cont" rule "cont" "^(?!([\d-]+ [\d:,]+)).*" "cont"
配置说明:
- 起始规则:用
^锚定行首,确保只匹配以指定日期格式开头的行,匹配后进入cont状态 - 续行规则:
^(?!([\d-]+ [\d:,]+)):行首否定前瞻,排除以日期格式开头的行.*:匹配该行剩余所有内容- 保持
cont状态,继续合并后续符合条件的行
如果遇到版本兼容性问题(比如部分Fluent Bit版本对前瞻支持有限),可以用更简单的写法:假设所有续行都不以数字开头(日期以数字开头),直接匹配非数字开头的行:
rule "cont" "^[^0-9].*" "cont"
这种写法更简洁,适用于日志续行没有数字开头的场景,避免复杂语法带来的问题。
内容的提问来源于stack exchange,提问作者el n00b
相关产品推荐
相关产品推荐

