如何轻松将 JSON 会员提升至主赛事级别?
How to easily promote a JSON member to the main event level?
我正在使用 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"
}
}
}
但是有这么多字段,我希望有一个单行代码可以只复制 'result' 值的所有字段作为事件。
这可以通过这样的 ruby
过滤器来完成:
ruby {
code => '
if (event.get("result"))
event.get("result").each { |k,v|
event.set(k,v);
}
event.remove("result");
end
'
}
我不知道有什么方法可以使用任何内置的 in/publicly 可用过滤器来做到这一点。
我正在使用 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"
}
}
}
但是有这么多字段,我希望有一个单行代码可以只复制 'result' 值的所有字段作为事件。
这可以通过这样的 ruby
过滤器来完成:
ruby {
code => '
if (event.get("result"))
event.get("result").each { |k,v|
event.set(k,v);
}
event.remove("result");
end
'
}
我不知道有什么方法可以使用任何内置的 in/publicly 可用过滤器来做到这一点。