我的logstash.conf可以在下面看到。
如何过滤掉包含特定字符串的邮件?在这种情况下,我的一些消息读作“DEBUG:xxx-xxx-xxx”,我希望将这些消息从logstash中过滤掉。
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 }
}
修改 我应该澄清一下,如果它包含一个“DEBUG”消息,我希望丢弃GREEDYDATA:msg字段。
答案 0 :(得分:1)
您正在寻找drop:
filter {
if [myField] == "badValue" {
drop { }
}
}
虽然使用完全匹配更好,但您也可以使用regexp条件:
filter {
if [myField] =~ "DEBUG" {
drop { }
}
}