我使用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"
}
}
}
但是有这么多领域,我希望有一个单行,只需复制“结果”的所有字段。价值最高的事件。
答案 0 :(得分:2)
可以使用ruby
过滤器完成此操作:
ruby {
code => '
if (event.get("result"))
event.get("result").each { |k,v|
event.set(k,v);
}
event.remove("result");
end
'
}
我不知道如何使用任何内置/公开可用的过滤器。