elasticsearch Logstash-如何在没有目标的情况下使用拆分过滤器拆分阵列?
我正在尝试将JSON数组拆分为多个事件。下面是一个示例输入:
elasticsearch Logstash-如何在没有目标的情况下使用拆分过滤器拆分阵列?,
elasticsearch,logstash,
elasticsearch,Logstash,我正在尝试将JSON数组拆分为多个事件。下面是一个示例输入: {"results" : [{"id": "a1", "name": "hello"}, {"id": "a2", "name": "logstash"}]} 以下是我的筛选器和输出配置: filter { split { field => "results" } } stdout { codec => "rubydebug" } 这将生成2个事件,数组中的每个JSON对应一个事件。而且它很接近我
{"results" : [{"id": "a1", "name": "hello"}, {"id": "a2", "name": "logstash"}]}
以下是我的筛选器和输出配置:
filter {
split {
field => "results"
}
}
stdout {
codec => "rubydebug"
}
这将生成2个事件,数组中的每个JSON对应一个事件。而且它很接近我想要的:
{
"results" => {
"id" => "a1",
"name" => "hello"
},
"@version" => "1",
"@timestamp" => "2015-05-30T18:33:21.527Z",
"host" => "laptop",
}
{
"results" => {
"id" => "a2",
"name" => "logstash"
},
"@version" => "1",
"@timestamp" => "2015-05-30T18:33:21.527Z",
"host" => "laptop",
}
问题在于嵌套的“结果”部分。“结果”是目标参数的默认值。
有没有一种方法可以在不生成嵌套JSON的情况下使用拆分过滤器,并获得如下结果:
{
"id" => "a1",
"name" => "hello"
"@version" => "1",
"@timestamp" => "2015-05-30T18:33:21.527Z",
"host" => "laptop",
}
{
"id" => "a2",
"name" => "logstash"
"@version" => "1",
"@timestamp" => "2015-05-30T18:33:21.527Z",
"host" => "laptop",
}
目的是将其馈送到ElasticSearch输出,每个事件都是一个document_id=>“id”的文档。欢迎任何好的解决方案 如果您知道所有字段将是什么(就像您所做的那样),您可以简单地重命名这些字段:
mutate {
rename => [
"[results][id]", "id",
"[results][name]", "name"
]
remove_field => "results"
}
如果您不知道所有字段都是什么,您可以编写一个
ruby
代码过滤器来执行事件['results']。每个…
,并从结果的子字段中创建新字段。您尝试过指定目标吗?使用ruby
代码的解决方案是什么?我第一次见到ruby时使用的是logstash,很难猜到事件['results']是什么。。