我如何通过与模式不匹配的KV过滤器排除解析事件

时间:2019-04-23 17:22:45

标签: elasticsearch filter logstash kivy-language

我正在解析许多UTM解决方案守护程序的日志。 Grok和kv配置看起来像:

 grok {
      match => [ "message", "%{SYSLOGPROG} %{NOTSPACE:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" ]
    }
    kv {
      id => "syslogkv"
      source => "syslog_message"
      trim_key => " "
      trim_value => " "
      value_split => "="
      field_split => " "
    }

通常情况下

    <30>2019:04:23-20:13:38 hostname ulogd[5354]: id="2001" severity="info" sys="SecureNet" sub="packetfilter" name="Packet dropped" action="drop" fwrule="60002" initf="eth3.5" outitf="eth5" srcmac="c8:9c:1d:af:68:7f" dstmac="00:1a:8c:f0:f5:23" srcip="x.x.x.x" dstip="y.y.y.y" proto="17" length="56" tos="0x00" prec="0x00" ttl="63" srcport="5892" dstport="53" 

并且解析没有问题

但是当某些守护程序生成类似的事件时(例如WAF)

<139>2019:04:23-16:21:38 hostname httpd[1475]: [security2:error] [pid 1475:tid 3743300464] [client x.x.x.x] ModSecurity: Warning. Pattern match "([\\\\~\\\\!\\\\@\\\\#\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\|\\\\:\\\\;\\"\\\\'\\\\\\xc2\\xb4\\\\\\xe2\\x80\\x99\\\\\\xe2\\x80\\x98\\\\`\\\\<\\\\>].*?){8,}"

我的输出中断,logstash停止处理任何日志。 如何通过正则表达式或任何模式排除kv解析事件? 简单来说,如果syslog_message中的第一个单词以“ [”或任何其他正则表达式开头,则不要使用kv。

1 个答案:

答案 0 :(得分:0)

将kv过滤器包装在条件字段中:

if [syslog_message] !~ /^\[/ {
    kv { }
}