如何定位导致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配置即可捕获所有解析失败的原始日志行,步骤如下:
- 在对应的syslog输入配置段添加
storage.keep_raw_records On参数,强制Fluent Bit留存所有接收到的原始消息,不受后续解析结果影响。 - 配置专用路由规则,将解析失败的记录单独输出到指定文件。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 - 配置生效后,所有触发JSON解析报错的原始日志内容,都会完整写入
/var/log/fluent-bit/failed_records/json_parse_error.log文件,直接查看该文件即可定位到具体的异常日志行。
- 在对应的syslog输入配置段添加
- 临时快速定位手段:如果需要临时复现排查,可以将全局
Log_Level调整为debug,复现问题时debug日志会附带解析失败的消息片段,该模式日志量极大,定位完成后记得立刻调回info级别,避免磁盘占用过高。 - 发送端感知方案说明:如果确实需要让日志发送端感知解析失败事件,需要自定义开发输出插件,将解析失败的状态通过套接字/TCP连接回传给发送端,常规排障场景下使用上述本地留存方案即可满足需求,不需要改动输入链路。
内容的提问来源于stack exchange,提问作者William W
相关产品推荐
相关产品推荐

