Logstash从现有json创建新的json

时间:2018-10-25 10:50:20

标签: logstash logstash-filter

我正在以这种格式获取数据:

{
    "a": "1",
    "b": "2"
}

我希望它更改为:

{
    data: {
        "a": "1",
        "b": "2"
    }
}

我可以使用mutate过滤器进行更改:

mutate {
     rename => {
        "[a]" => "[data][a]"
        "[b]" => "[data][b]"
    }
}

但是在这里,我必须分别重命名每个字段。

有没有一种方法可以在数据字段中移动整个传入消息,例如:

rename => {"[entite_message]" => "[data][entire_message]"}

1 个答案:

答案 0 :(得分:0)

您可以使用Events APIruby filter来实现。

添加下面的红宝石块应该可以解决问题。

ruby {
    code => '
        # Move everything to data
        event.set("data", event.to_hash)

        # Remove fields other than data
        fields = event.to_hash.keys
        fields.each{|field|
            if (field != "data")
                event.remove(field)
            end
        }
    '
}