Fluent Bit 1.8+采集K8s Java应用多行堆栈日志结构化问题求助
Fluent Bit CRI环境下Java堆栈日志结构化解决方案
问题根因
- 原多行解析器的起始行正则与实际Java(Spring Boot)应用的日志开头格式不匹配,无法正确识别日志首行,导致多行堆栈不能合并
- 仅配置了多行合并规则,未添加后续的Java日志结构化解析步骤,合并后的完整日志仍然是普通字符串,没有拆分为独立的可检索字段
- 存在配置冲突风险:若INPUT中同时保留
Parser cri和Multiline.parser配置,会导致日志重复解析出错
完整修复配置
1. 调整input-kubernetes.conf
移除单独的Parser配置,保留多行解析器指定即可:
input-kubernetes.conf: | [INPUT] Name tail Tag kube.* Path /var/log/containers/*.log Read_from_head true Multiline.parser cri, multiline-java-cri
2. 修正parsers.conf配置
补充适配Java堆栈的多行规则,新增Spring Boot日志结构化解析器:
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 # Java多行堆栈合并规则 [MULTILINE_PARSER] name multiline-java-cri type regex flush_timeout 1000 # 起始行匹配Spring Boot标准ISO时间开头,可根据实际应用日志格式调整 rule "start_state" "/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}[+-]\d{2}:\d{2}).*/" "cont" # 续行匹配堆栈常见格式:空格开头的调用栈、Caused by开头的异常根因、省略的公共帧 rule "cont" "/^\s+at.*/" "cont" rule "cont" "/^Caused by:.*/" "cont" rule "cont" "/^\.\.\. \d+ common frames omitted$/" "cont" # Spring Boot日志结构化解析器,可根据实际应用日志格式调整正则 [PARSER] Name springboot-log Format regex Regex ^(?<log_time>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}[+-]\d{2}:\d{2})\s+(?<log_level>\w+)\s+(?<pid>\d+)\s+---\s+\[(?<thread>[^\]]+)\]\s+(?<class>[^\s]+)\s+:\s+(?<log_content>.*)$ Time_Key log_time Time_Format %Y-%m-%dT%H:%M:%S.%L%z
3. 新增结构化解析Filter
在filter-kubernetes.conf中添加parser过滤器,拆分合并后的Java日志为独立字段:
filter-kubernetes.conf: | [FILTER] Name kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token Kube_Tag_Prefix kube.var.log.containers. Merge_Log On Merge_Log_Key log_processed K8S-Logging.Parser On K8S-Logging.Exclude Off # 新增Java日志结构化解析 [FILTER] Name parser Match kube.* Key_Name message Parser springboot-log Reserve_Data On
验证与排障
- 重启Fluent Bit Pod后查看Pod运行日志,确认无配置语法错误
- 若应用日志格式为自定义格式,可根据实际日志开头调整多行解析的起始行正则
- 若使用1.8.x版本仍存在多行合并问题,可升级Fluent Bit到1.9.x及以上版本,对CRI格式多行解析的适配性更优
内容的提问来源于stack exchange,提问作者Maksim
相关产品推荐
相关产品推荐

