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

如何通过Fluentd配置扁平化嵌套JSON格式的容器日志?

可以通过Fluentd配置实现该需求

你需要通过多层JSON解析和字段扁平化两个步骤处理这类嵌套转义的日志,以下是具体实现方案:

步骤1:解析log字段中的转义JSON

使用parser插件将字符串类型的log字段解析为结构化嵌套JSON,同时保留原有的time字段:

<filter **>
  @type parser
  key_name log
  reserve_data true
  remove_key_name_field true
  <parse>
    @type json
  </parse>
</filter>

执行后日志结构变为:

{
  "time": "time_val",
  "field1": "value1",
  "field2": "value2",
  "field3": "{\"nested_field1\": \"value1\",\"nested_field2\": \"value2\",\"nested_field3\": \"value3\"}"
}

步骤2:解析field3字段中的转义JSON

再次使用parser插件解析field3字段,完成最终扁平化:

<filter **>
  @type parser
  key_name field3
  reserve_data true
  remove_key_name_field true
  <parse>
    @type json
  </parse>
</filter>

此时日志会变成你需要的目标格式:

{
  "time": "time_val",
  "field1": "value1",
  "field2": "value2",
  "nested_field1": "value1",
  "nested_field2": "value2",
  "nested_field3": "value3"
}

完整配置示例

将上述逻辑整合到完整的Fluentd配置中:

<source>
  # 替换为你的容器日志采集配置(如docker/containerd)
  @type docker
  tag docker.*
  <parse>
    @type json  # 先解析外层容器日志的JSON结构
  </parse>
</source>

<filter docker.**>
  @type parser
  key_name log
  reserve_data true
  remove_key_name_field true
  <parse>
    @type json
  </parse>
</filter>

<filter docker.**>
  @type parser
  key_name field3
  reserve_data true
  remove_key_name_field true
  <parse>
    @type json
  </parse>
</filter>

<match docker.**>
  # 替换为你的输出配置(如elasticsearch/stdout)
  @type stdout
</match>

注意事项

  • 若field3存在特殊转义格式,可在parser插件中启用unescape_strings参数适配
  • 针对更复杂的多层嵌套场景,可重复使用parser插件逐层解析,或结合record_transformer插件的flatten指令灵活处理字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:35:07