如何修改 Fluentd 的 JSON 输出格式?

修改 Fluentd JSON 输出用 record_transformer 过滤器:record 块中加字段、改字段、删字段(脱敏),输出段可再配 format json 控制序列化。本文给出增删改完整示例。

最佳实践
如何修改 Fluentd 的 JSON 输出格式?封面

在 filter 中用 record_transformer<record> 块里写键值对即增改字段,remove_keys 删除字段——日志在输出前被就地改造,输出的 JSON 格式由你完全控制。

完整示例

<source>
  @type tail
  path /var/log/app.log
  tag app.logs
  <parse>
    @type json
  </parse>
</source>

<filter app.logs>
  @type record_transformer
  remove_keys password,token          # 删除敏感字段
  <record>
    hostname    "#{Socket.gethostname}"   # 加主机名
    environment production                # 加静态字段
    user_id     ${record["user"]["id"]}   # 嵌套字段提到顶层
    message     ${record["message"].strip} # Ruby 表达式处理值
  </record>
</filter>

<match app.logs>
  @type file
  path /var/log/processed/app.log
  <format>
    @type json
  </format>
</match>

三个高频需求

  1. 加字段:直接写 key value
  2. 改/提字段${record["a"]["b"]} 访问嵌套值后赋给新键;
  3. 删字段remove_keys key1,key2(注意是参数不是 record 里的指令)。

观测云对照

观测云 DataKit Pipeline 用 add_key()rename()drop_key()replace() 等函数完成同样的改造,脚本在控制台在线调试、实时预览输出 JSON。

常见问题(FAQ)

Q:改了字段类型会变吗? record_transformer 的值默认是字符串;保持原类型用 enable_ruby false 配合 auto_typecast,或在输出端用插件处理。

Q:能按条件改吗? <record> 里可以写 Ruby 三元表达式:level_name ${record["status"].to_i >= 500 ? "error" : "ok"}

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台