Logstash 合并字段与根对象

Logstash Merge Field With Root Object

我有这样的 logstash 输入

{
    "@timestamp": "2016-12-20T18:55:11.699Z",
    "id": 1234,
    "detail": {
        "foo": 1
        "bar": "two"
    }
}

我想将 "detail" 的内容与根对象合并,以便最终事件如下所示:

{
    "@timestamp": "2016-12-20T18:55:11.699Z",
    "id": 1234,
    "foo": 1
    "bar": "two"
}

有没有办法在不编写自己的过滤器插件的情况下完成此操作?

您可以使用 ruby 过滤器来做到这一点。

filter { ruby { code => " event['detail'].each {|k, v| event[k] = v } event.remove('detail') " } }

使用 json_encode 插件(默认不包含)有一个简单的方法。

json 提取器将字段添加到事件的根。它是为数不多的可以向根添加内容的提取器之一。

filter {
    json_encode {
        source => "detail"
        target => "detail"
    }

    json {
        source => "detail"
        remove_field => [ "detail" ]
    }
}