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

如何定位导致Fluent Bit JSON解析错误的原始日志消息

Fluent Bit JSON解析失败问题排查方案

你观测到的解析报错如下:

Jul 14 01:08:12 servername td-agent-bit[373138]: [2022/07/14 01:08:12] [ warn] [input:syslog:syslog.1] error parsing log message with parser 'json'

核心结论与操作方法

  • 默认行为说明:Fluent Bit默认不会存储解析失败的原始消息,仅输出你看到的warn级日志,且默认配置下无论使用Unix本地套接字还是TCP作为输入源,日志发送端都无法感知解析失败事件——解析动作和网络接收流程完全解耦,不需要特意将输入切换为TCP监听器,切换后默认逻辑下也拿不到解析失败的通知。
  • 留存解析失败日志的配置方法:不需要改动现有输入类型,直接调整Fluent Bit配置即可捕获所有解析失败的原始日志行,步骤如下:
    1. 在对应的syslog输入配置段添加storage.keep_raw_records On参数,强制Fluent Bit留存所有接收到的原始消息,不受后续解析结果影响。
    2. 配置专用路由规则,将解析失败的记录单独输出到指定文件。Fluent Bit解析失败的记录会自动携带解析失败的元数据标记,你可以通过标签匹配将这类记录分流,参考配置如下:
      [SERVICE]
          Log_Level    info
          # 其余全局配置保持原有值不变
      
      [INPUT]
          Name         syslog
          Path         /run/fluent-bit/syslog.sock  # 替换为你实际的套接字路径
          Parser       json
          Tag          syslog.local
          storage.keep_raw_records  On
      
      [FILTER]
          Name         rewrite_tag
          Match        syslog.*
          Rule         $Parser-Failed == "json"  syslog.parse_failed.json  true
      
      [OUTPUT]
          Name         file
          Match        syslog.parse_failed.json
          Path         /var/log/fluent-bit/failed_records/
          File         json_parse_error.log
      
    3. 配置生效后,所有触发JSON解析报错的原始日志内容,都会完整写入/var/log/fluent-bit/failed_records/json_parse_error.log文件,直接查看该文件即可定位到具体的异常日志行。
  • 临时快速定位手段:如果需要临时复现排查,可以将全局Log_Level调整为debug,复现问题时debug日志会附带解析失败的消息片段,该模式日志量极大,定位完成后记得立刻调回info级别,避免磁盘占用过高。
  • 发送端感知方案说明:如果确实需要让日志发送端感知解析失败事件,需要自定义开发输出插件,将解析失败的状态通过套接字/TCP连接回传给发送端,常规排障场景下使用上述本地留存方案即可满足需求,不需要改动输入链路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:18:18