如何轻松地将JSON成员提升到主要事件级别?

时间:2017-05-25 13:49:47

标签: logstash logstash-json

我使用http_poller命中API端点,查找我想用elasticsearch索引的一些信息。结果是JSON,是一个记录列表,如下所示:

{
  "result": [
     {...},
     {...},
     ...
  ]
}

数组中的每个结果对象都是我真正希望变成在ElasticSearch中被索引的事件,因此我尝试使用split过滤器将对象转换为一系列事件。它工作得相当好,但现在我有一系列事件看起来像这样:

{ 
  result: { ... }
}

我当前的过滤器如下所示:

filter {
  if [type] == "history" {
    split {
      field => "result"
    }
  }
}

每个结果对象都有大约20个字段,其中大部分都是我想要的,所以虽然我知道我可以通过做一些事情来改变它们

filter {
      if [type] == "history" {
        split {
          field => "result"
        }
        mutate {
           add_field => { "field1" => "%{[result][field1]}"
           #... x15-20 more fields
           remove_field => "result"
        }
      }
    }

但是有这么多领域,我希望有一个单行,只需复制“结果”的所有字段。价值最高的事件。

1 个答案:

答案 0 :(得分:2)

可以使用ruby过滤器完成此操作:

       ruby {
                code => '
                        if (event.get("result"))
                                event.get("result").each { |k,v|
                                        event.set(k,v);
                                }
                                event.remove("result");
                        end
                '
        }

我不知道如何使用任何内置/公开可用的过滤器。