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

Filter specific Message with logstash before sending to ElasticSearch

我想知道是否可以通过 logstash 只将特定的日志消息发送到 elasticsearch?例如,假设我的日志文件中有这些消息:

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 的日志消息'?或者只允许使用关键字 'PASS'?

记录消息

是的,您可以使用 drop filter

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

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

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

尽管 Val 的回答是正确的,但您可以使用另一种方法进行过滤 conditional:

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