我想匹配一个系统日志字符串并匹配到相应的字段中。这是有问题的消息:
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”。
谢谢!