Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Logstash筛选器删除除指定字段列表之外的所有字段的\u字段_Logstash_Logstash Configuration - Fatal编程技术网

Logstash筛选器删除除指定字段列表之外的所有字段的\u字段

Logstash筛选器删除除指定字段列表之外的所有字段的\u字段,logstash,logstash-configuration,Logstash,Logstash Configuration,我正在将一组数据解析成一个ELK堆栈,供一些非技术人员查看。作为其中的一部分,我希望在发送到ElasticSearch之前,从事件中删除除特定已知字段子集以外的所有字段 我可以显式地指定每个字段以放入一个变异过滤器,如下所示: filter { mutate { remove_field => [ "throw_away_field1", "throw_away_field2" ] } } 在这种情况下,只要在输入数据中添加一个新字段(由于数据从队列中提取

我正在将一组数据解析成一个ELK堆栈,供一些非技术人员查看。作为其中的一部分,我希望在发送到ElasticSearch之前,从事件中删除除特定已知字段子集以外的所有字段

我可以显式地指定每个字段以放入一个变异过滤器,如下所示:

filter {
    mutate {
        remove_field => [ "throw_away_field1", "throw_away_field2" ]
    }
}
在这种情况下,只要在输入数据中添加一个新字段(由于数据从队列中提取并由多个系统用于多个目的,这种情况经常发生),就需要更新筛选,这是不需要的额外开销。更不用说,如果一些敏感数据在更新输入流和更新过滤之间通过,那可能是不好的

是否有一种方法可以使用logstash过滤器迭代对象的每个字段,如果字段不在提供的字段名列表中,则删除_字段?或者我需要编写一个自定义过滤器来实现这一点?基本上,对于每一个对象,我只想保留8个特定的字段,并完全丢弃所有其他字段

它看起来非常小
if![field]=~/^value$/
类型逻辑在logstash.conf文件中可用,但我没有看到任何示例会在每个样式的
中迭代字段本身,并将字段名与值列表进行比较

回答:

在将logstash升级到1.5.0以能够使用诸如prune之类的插件扩展之后,解决方案最终看起来是这样的:

filter {
    prune {
        interpolate => true
        whitelist_names => ["fieldtokeep1","fieldtokeep2"]
    }
}
白名单应该是你要找的


对于更具体的控制,下一步可能是删除ruby过滤器。

另一个选项是将解析的json移到新字段中,而不是使用mutate,例如:

filter {
   json {
      source => "json"
      target => "parsed_json"
   }

   mutate {
      add_field => {"nested_field" => "%{[parsed_json][nested_field]}"}
      remove_field => [ "json", "parsed_json" ]
   }
}

这正是我要找的。我会给它一个尝试,并报告回来…我必须升级logstash使其工作,因此延迟,但这正是我所寻找的。谢谢你的快速回答!已接受:)这是一个很好的替代解决方案,可以避免我必须升级logstash才能安装prune过滤器。@redstonemercury我认为你可以安装插件,而不是升级logstash
logstash过滤器prune
prune不适用于json中的子集,只有顶级值起作用如果“修剪”有问题,这可能是非常好的b计划。像我一样。。。mutate是核心包。