简体   繁体   English

用record_transformer插件修改fluentd json

[英]Modify fluentd json with record_transformer plugin

I have logs like this:我有这样的日志:

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

Here's fluentd configuration for record_transformer :这是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>

This deletes the posts field and recreates so that all the other keys in the posts field are lost ie:这将删除posts字段并重新创建,以便posts字段中的所有其他键都丢失,即:

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

This is the desired log output:这是所需的日志 output:

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

Is there any way for this use-case?这个用例有什么办法吗?

Thanks!谢谢!

You need to return the complete posts object after modification like this:修改后需要返回完整的posts object:

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

In its current form ie:目前的形式即:

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

it returns the first object only after modification which is assigned to posts and that is what you're seeing.它仅在分配给posts的修改后返回第一个 object,这就是您所看到的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM