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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:03