【问题标题】:Modify fluentd json with record_transformer plugin使用 record_transformer 插件修改 fluentd json
【发布时间】:2020-09-23 02:52:14
【问题描述】:

我有这样的日志:

{
    "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,
}

这个用例有什么办法吗?

谢谢!

【问题讨论】:

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

标签: json fluentd


【解决方案1】:

你需要像这样修改后返回完整的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,这就是您所看到的。

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多