在发送到ElasticSearch之前使用logstash过滤特定消息

时间:2015-09-03 08:09:09

标签: elasticsearch logstash logstash-grok logstash-configuration logstash-forwarder

我想知道是否可以通过logstash仅向elasticsearch发送特定的日志消息? E.G让我说我的日志文件中有这些消息:

2015-08-14 12:21:03 [31946] PASS  10.249.10.70  http://google.com
2015-08-14 12:25:00 [2492]  domainlist \"/etc/ufdbguard/blacklists\
2015-08-14 12:21:03 [31946] PASS 10.249.10.41 http://yahoo.com

当logstash / log转发器处理此日志时,我想跳过第二行,是否可以指示它跳过包含关键字“ domainlist ”的任何日志消息?或者仅允许使用关键字“通过”?

的日志消息

2 个答案:

答案 0 :(得分:2)

是的,您可以使用drop filter

来实现这一目标

根据您记录日志行的方式以及您拥有的字段名称,如果事件符合某些条件,您可以决定删除该事件。例如,在下面您可以看到grok过滤器之后的条件,该过滤器会检查myfield是否包含与值PASS不同的内容,在这种情况下它会丢弃事件。

filter {
  grok {
      ...your parsing regexp here...
  }

  if [myfield] != "PASS" {
    drop { }
  }
}

答案 1 :(得分:1)

虽然Val的回答是正确的,但另一种方法是使用conditional进行过滤:

output {
  if "PASS" in [message] {
    elasticsearch {
      ...
    }
  }
}