【问题标题】:Logstash mutate add all fields from jsonLogstash mutate 添加来自 json 的所有字段
【发布时间】:2016-12-19 20:49:02
【问题描述】:

我正在使用 Logstash 插件 (logstash-input-rethinkdb)。 该插件抓取数据库中的所有编辑并输出包含以下结构的 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 中插入此文档。
但问题是在弹性中我得到相同的结构 -> new_val:{code:''}

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

我尝试了过滤器json,但这得到了string,并且插件已经输出了json

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

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

【问题讨论】:

    标签: elasticsearch logstash rethinkdb


    【解决方案1】:

    您可以使用 ruby​​ 过滤器:

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

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

    【讨论】:

    • 谢谢,我也这样做了,但有点不同。
    【解决方案2】:

    这在他们将类 Logstash::Event 更改为 API 后有效: https://www.elastic.co/guide/en/logstash/current/event-api.html

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多