从logstash.conf中筛选消息
我的logstash.conf可以在下面看到 我如何过滤掉包含特定字符串的消息?在本例中,我的一些消息读作“DEBUG:xxx xxx xxx xxx”,我希望这些消息从日志中过滤出来从logstash.conf中筛选消息,logstash,logstash-grok,logstash-configuration,Logstash,Logstash Grok,Logstash Configuration,我的logstash.conf可以在下面看到 我如何过滤掉包含特定字符串的消息?在本例中,我的一些消息读作“DEBUG:xxx xxx xxx xxx”,我希望这些消息从日志中过滤出来 input { tcp { port => 5000 type => syslog } udp { port => 5000 type => syslog } } filter { if [loglevel] == "debug" {
input {
tcp {
port => 5000
type => syslog
}
udp {
port => 5000
type => syslog
}
}
filter {
if [loglevel] == "debug" {
drop { }
}
if [type] == "syslog" {
grok {
match => {
"message" => "%{SYSLOG5424PRI}%{NONNEGINT:ver} +(?:% {TIMESTAMP_ISO8601:ts}|-) +(?:%{HOSTNAME:containerid}|-) +(?:%{NOTSPACE:containername}|-)
+(?:%{NOTSPACE:proc}|-) +(?:%{WORD:msgid}|-) +(?:%{SYSLOG5424SD:sd}|-|) +%{GREEDYDATA:msg}" }
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
if !("_grokparsefailure" in [tags]) {
mutate {
replace => [ "@source_host", "%{syslog_hostname}" ]
replace => [ "@message", "%{syslog_message}" ]
}
}
mutate {
remove_field => [ "syslog_hostname", "syslog_message", "syslog_timestamp" ]
}
}
}
output {
elasticsearch { host => "elasticsearch" }
stdout { codec => rubydebug }
}
编辑:
我应该澄清,如果包含“调试”消息,我希望删除的是GREEDYDATA:msg字段。您正在查找:
虽然最好使用精确匹配,但也可以使用regexp条件:
filter {
if [myField] =~ "DEBUG" {
drop { }
}
}
对不起,我应该在我的帖子中提到,包含“DEBUG”的是GREEDYDATA消息。我编辑了我的帖子来澄清这一点。当[loglevel]等于debug时,我已经在使用drop。当GREEDYDATA包含“DEBUG”作为字符串的一部分时,这也会起作用吗?
filter {
if [myField] =~ "DEBUG" {
drop { }
}
}