Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch Logstash-如何在没有目标的情况下使用拆分过滤器拆分阵列?_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash - Fatal编程技术网 elasticsearch Logstash-如何在没有目标的情况下使用拆分过滤器拆分阵列?,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch Logstash-如何在没有目标的情况下使用拆分过滤器拆分阵列?,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch Logstash-如何在没有目标的情况下使用拆分过滤器拆分阵列?

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对应一个事件。而且它很接近我

我正在尝试将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']是什么。。