我在查找所有日志的正确grok模式时遇到问题,以便通过logstash解析所有日志。
我的日志示例:
1)2016-04-13 19:55:40:pid 21950:LOG:pool_send_and_wait:来自后端的错误或通知消息:: DB node id:4 backend pid:65156 statement:“UPDATE certname ..... 。“......(日志的其余部分无关紧要)
2)2016-04-13 19:55:40:pid 17555:致命:未能从后端阅读
我的格鲁克模式(部分工作):
grok { match => {“message”=> “%{GREEDYDATA:logdate}:pid%{NUMBER:pid}:%{LOGLEVEL:loglevel}:%{GREEDYDATA:logmessage}”} }
你可以看到这些是我关心的事情: 1)日志的日期 2)PID 3)loglevel 4)消息本身
除了上面的模式,我还尝试使用\ A%{TIMESTAMP_ISO8601:timestamp}模式指定日期(就像grok调试器建议的那样)。
我的假设是第一个日志是我有问题的日志,因为它在其中有两次“log”这个词,虽然在第二次它没有出现在冒号之后(不像我的grok模式)所以我不知道它为什么没有解析操作。
事实上,我的日志中没有包含单词“log”两次成功解析 - 我的模式部分工作。
谢谢:)
答案 0 :(得分:0)
制作grok模式的技巧是从左边开始,让第一个工作,然后慢慢向右移动直到你完成。
这样做,当你添加%{LOGLEVEL}时,你会看到它停止工作。为什么?因为“LOG”对LOGLEVEL无效。它期待像DEBUG之类的东西。使用类似%{WORD}的东西,它可以正常工作。