2016-01-20 64 views
1

我的logstash.conf可以在下面看到。将信息过滤出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 } 
} 

编辑: 我要澄清的是它是GREEDYDATA:MSG字段,我希望删除,如果它包括一个“DEBUG”消息。

回答

1

您正在寻找drop

filter { 
    if [myField] == "badValue" { 
     drop { } 
    } 
} 

虽然最好使用精确匹配,你也可以做正则表达式条件句:

filter { 
    if [myField] =~ "DEBUG" { 
     drop { } 
    } 
} 
+0

对不起,我应该在我的文章中提到,它是包含“DEBUG”的GREEDYDATA消息。我编辑了我的帖子来澄清这一点。当[loglevel]等于debug时,我已经在使用drop。当GREEDYDATA包含“DEBUG”作为字符串的一部分时,这也可以工作吗? – User588233