【发布时间】:2016-04-13 17:40:32
【问题描述】:
我在为所有日志找到正确的 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: FATAL: 无法从后端读取 kind
我的 grok 模式(部分有效):
咕咕{ 匹配 => { "消息" => "%{GREEDYDATA:logdate}: pid %{NUMBER:pid}: %{LOGLEVEL:loglevel}: %{GREEDYDATA:logmessage}" } }
如您所见,这些是我关心的事情: 1) 日志日期 2) PID 3) 日志级别 4) 消息本身
除了上面的模式,我还尝试使用 \A%{TIMESTAMP_ISO8601:timestamp} 模式指定日期(就像 grok 调试器建议我的那样)。
我的假设是第一个日志是我有问题的日志的那种,因为它在其中两次出现“日志”这个词,尽管在第二次它没有出现在冒号之后(不像我的 grok 模式)所以我不知道为什么它会导致解析操作失败。
事实上,我的不包含单词“log”的日志被成功解析了两次——我的模式部分起作用。
谢谢:)
【问题讨论】:
-
尽量只在模式末尾使用 GREEDYDATA。切换到 ISO8601 以匹配日期时间,看看情况如何。
-
我试过了,没用
标签: logging elasticsearch logstash logstash-grok grok