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

如何使用Fluentd解析EKS集群中Java服务的Kubernetes日志

解决EKS中Java服务日志字段拆分问题

你的Java服务日志可以拆分为日期时间、线程名、日志级别、类名、消息等独立字段在Kibana展示,问题出在现有Fluentd配置的正则表达式和实际日志格式不匹配,导致解析失败,日志只能整行存入。

修正后的Fluentd Source配置

<source>
      @type tail
      path /var/log/containers/*background-executor*.log
      pos_file fluentd-docker.pos
      tag kubernetes.*
      read_from_head true
      <parse>
        @type multi_format
        <pattern>
          format json
          time_key time
          time_type string
          time_format "%Y-%m-%dT%H:%M:%S.%NZ"
          keep_time_key false
        </pattern>
        <pattern>
          format regexp
          expression /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3})\s+\[(?<thread>[^\]]+)\]\s+(?<level>[A-Z]+)\s+(?<class>[^\-]+)\s+-\s+(?<message>.*)/
          time_format "%Y-%m-%d %H:%M:%S,%L"
          time_zone "UTC" # 根据你的集群时区调整,比如"Asia/Shanghai"
          keep_time_key false
        </pattern>
      </parse>
</source>

关键修正说明

  1. 正则表达式匹配调整:

    • (?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}):匹配日志开头的日期时间(注意毫秒用逗号分隔,而非点)
    • \[(?<thread>[^\]]+)\]:匹配方括号内的完整线程名(包含空格)
    • (?<level>[A-Z]+):匹配大写的日志级别(如DEBUG、INFO)
    • (?<class>[^\-]+):匹配减号前的类名(自动忽略类名后的多余空格)
    • -\s+(?<message>.*):匹配减号后的所有内容作为消息字段
  2. 时间格式修正:

    • 将time_format改为"%Y-%m-%d %H:%M:%S,%L",对应日志里的逗号分隔毫秒格式
    • 添加time_zone指定时区,确保Kibana中时间显示与集群时区一致

验证步骤

  1. 替换现有Fluentd配置,重启Fluentd服务
  2. 触发Java服务生成新日志
  3. 在Kibana中查看日志,确认thread、level、class、message等字段已独立展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:25:37