0

我在一个文件中使用logstash过滤器插件处理多个日志消息。然后,过滤的日志将发送到elasticsearch。删除过滤器不工作logstash

在日志消息中有一个字段叫做addID。我想删除所有具有特定addID的日志消息。这些特定的addIDS存在于ID.yml文件中。

场景:如果日志消息的addID与ID.yml文件中存在的任何addID匹配,则应删除该日志消息。

任何人都可以帮助我实现这一目标吗?

下面是我的配置文件。

input { 


    file { 
    path => "/Users/jshaw/logs/access_logs.logs 
    ignore_older => 0 
    } 
} 

filter { 


    grok { 

     patterns_dir => ["/Users/jshaw/patterns"] 
     match => ["message", "%{TIMESTAMP:Timestamp}+{IP:ClientIP}+{URI:Uri}"] 

    } 


    kv{ 
     field_split => "&?" 
     include_keys => [ "addID" ] 
     allow_duplicate_values => "false" 

    } 

    if [addID] in "/Users/jshaw/addID.yml" { 
     drop{} 
    } 

} 

output { 

    elasticsearch{ 
     hosts => ["localhost:9200"] 

     } 
} 

回答

0

您正在使用in运算符错误。它用于检查数值是否在数组中,而不是在文件中,这通常使用起来更复杂一些。

解决方法是使用ruby过滤器每次打开文件。
或将ADDID值在配置文件中,就像这样:

if [addID] == "addID" { 
    drop{} 
} 
+0

感谢您的答复。 所以,如果我使用红宝石过滤器,那么我将能够删除具有特定addID的日志消息? – User24

+0

@ User24是的。 cf [文档](https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html) – baudsp