Grok匹配并将字符串划分为多个字段

时间:2018-07-06 09:03:30

标签: elasticsearch logstash elastic-stack

我想匹配一个系统日志字符串并匹配到相应的字段中。这是有问题的消息:

Jul 06 2018 08:04:18: %ASA-6-305011: Built dynamic UDP translation from any:123.123.123.123/35439 to OUTSIDE-VRF180:123.123.123.123/35439

我正在针对此运行的grok过滤器如下:

grok {
        match => ["message", "%{SYSLOGHOST:ciscotag}%{GREEDYDATA:cisco_message}"]  
      }

但是,问题是并非所有消息都具有时间戳,因此我无法首先在时间戳上进行匹配。我想要的是一个过滤器,如果消息包含时间戳,则可以正确地解析每个syslog消息;如果不包含时间戳,则也可以正确匹配。我觉得有点像“或”陈述?

编辑:

所以我用http://grokconstructor.appspot.com/do/constructionstep来尝试构造一个与时间戳匹配的grok过滤器,这就是我想到的:

^%{CISCOTIMESTAMP}%{CRON_ACTION}%{SYSLOGHOST}%{CRON_ACTION}%{SYSLOGPROG:ciscotag}%{SPACE}%{GREEDYDATA:cisco_message}$

在grokconstructor网站上,它成功匹配,但是当我在logstash中尝试它时,例如,我在“ ciscotag”中得到了一些时间戳。因此,匹配失败,并被标记为“ _grokparsefailure”。

谢谢!

0 个答案:

没有答案