如何在将解析数据存储到Elasticsearch之前使用Logstash过滤数据

问题描述 投票:1回答:2

我知道Logstash用于聚合和处理日志。我有NGINX日志并将Logstash配置设置为:

filter {
 grok {
   match => [ "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}"]
   overwrite => [ "message" ]
 }
 mutate {
   convert => ["response", "integer"]
   convert => ["bytes", "integer"]
   convert => ["responsetime", "float"]
 }
 geoip {
   source => "clientip"
   target => "geoip"
   add_tag => [ "nginx-geoip" ]
 }
 date {
   match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
   remove_field => [ "timestamp" ]
 }
 useragent {
   source => "agent"
 }
}

output {
 elasticsearch {
   hosts => ["localhost:9200"]
   index => "weblogs-%{+YYYY.MM}"
   document_type => "nginx_logs"
 }
 stdout { codec => rubydebug }
}

这会将非结构化日志解析为结构化数据形式,并将数据存储到月度索引中。

我发现大多数日志都是由机器人/网络爬虫提供的。在python中,我会通过以下方式过滤掉它们:

browser_names = browser_names[~browser_names.str.\
                              match('^[\w\W]*(google|bot|spider|crawl|headless)[\w\W]*$', na=False)]

但是,我想用Logstash过滤掉它们,这样我就可以在Elasticsearch服务器中节省大量的磁盘空间。有没有办法做到这一点?提前致谢!

elasticsearch logstash logstash-grok logstash-configuration
2个回答
1
投票

在您的过滤器中,您可以要求放弃(https://www.elastic.co/guide/en/logstash/current/plugins-filters-drop.html)。因为你已经有了你的模式,应该非常快;)


1
投票

感谢LeBigCat慷慨地给出了一个暗示。我通过在过滤器下添加以下内容来解决此问题:

 if [browser_names] =~ /(?i)^[\w\W]*(google|bot|spider|crawl|headless)[\w\W]*$/ {
   drop {}
 }

(?i)标志用于不区分大小写的匹配。

© www.soinside.com 2019 - 2024. All rights reserved.