使用record_transformer插件修改fluentd json

时间:2020-09-23 02:52:14

标签: json fluentd

我有这样的日志:

{
    "posts": {
        "key1": "value123",
        "key2": "abcdge123",
        "key3": "abcdge345",
        "....": "....",
        "something": "something"
    },
    "execute_time": 123,
    "code": 200,
}

这是record_transformer的流利配置:

<filter tag.hellow>
  @type record_transformer
  enable_ruby true
  <record>
    posts ${ if record['posts'].has_key?('key1'); Base64.strict_encode64(record['posts']['key1'].to_s); end }
  </record>
</filter>

这将删除posts字段并重新创建,以使posts字段中的所有其他键都丢失,即:

{
    "posts": {
        "key1": "base64XXXXXXX"
    },
    "execute_time": 123,
    "code": 200,
}

这是所需的日志输出:

{
    "posts": {
        "key1": "base64XXXXXXX",
        "key2": "abcdge123",
        "key3": "abcdge345",
        "....": "....",
        "something": "something"
    },
    "execute_time": 123,
    "code": 200,
}

这个用例有什么办法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

修改后,您需要返回完整的posts对象:

posts ${ if record['posts'].has_key?('key1'); record['posts']['key1'] = Base64.strict_encode64(record['posts']['key1'].to_s); record['posts']; end }

当前格式,即:

posts ${ if record['posts'].has_key?('key1'); Base64.strict_encode64(record['posts']['key1'].to_s); end }

仅在修改后返回分配给posts的第一个对象,这就是您所看到的。

相关问题