在发送到 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 {
...
}
}
}
我想知道是否可以通过 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 {
...
}
}
}