elasticsearch Logstash mutate从json添加所有字段,elasticsearch,logstash,rethinkdb,elasticsearch,Logstash,Rethinkdb" /> elasticsearch Logstash mutate从json添加所有字段,elasticsearch,logstash,rethinkdb,elasticsearch,Logstash,Rethinkdb" />

elasticsearch Logstash mutate从json添加所有字段

elasticsearch Logstash mutate从json添加所有字段,elasticsearch,logstash,rethinkdb,elasticsearch,Logstash,Rethinkdb,我正在使用一个Logstash插件(Logstash-input-db)。 此插件获取数据库中的所有编辑,并输出包含以下结构的json对象: { "db":"itjobs", "table":"countries", "old_val":null, "new_val":{ "code":"USA3", "country":"USA3", "id":"7c8c9e4e-aa37-48

我正在使用一个Logstash插件(Logstash-input-db)。 此插件获取数据库中的所有编辑,并输出包含以下结构的json对象:

{
      "db":"itjobs",
      "table":"countries", 
      "old_val":null,
      "new_val":{
           "code":"USA3",
           "country":"USA3",
           "id":"7c8c9e4e-aa37-48f1-82a5d624cde4a3a0"
      },
      "@version":"1",
      "@timestamp":"2016-12-19T19:54:08.263Z"
 }
我在elasticsearch中插入此文档。
但问题是,在elastic中,我得到的结构与->
new\u val:{code:'}

我需要做一个过滤器或其他东西,从
new\u val
中提取所有内容并将其添加到根目录中

我尝试了过滤器
json
,但是这得到了一个
字符串
,插件已经输出了json

编辑后,我需要它看起来像:

{
      "db":"itjobs",
      "table":"countries", 
      "code":"USA3",
      "country":"USA3",
      "id":"7c8c9e4e-aa37-48f1-82a5d624cde4a3a0"
      "@version":"1",
      "@timestamp":"2016-12-19T19:54:08.263Z"
 }

您可以使用ruby过滤器:

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

使用Logstash 2.2进行测试后,版本5+应该会有所不同。

在他们将Logstash::Event类更改为API:


谢谢,我也这么做了,但有点不同。
filter {
  ruby {
    code => "
      event.get('new_val').each {|k, v|
        event.set(k,v)
      }
      event.remove('new_val')
    "
  }
}