【问题标题】:Logstash grok pattern for pgpool logspgpool 日志的 Logstash grok 模式
【发布时间】: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


【解决方案1】:

制作 grok 模式的诀窍是从左边开始,让第一个开始工作,然后慢慢向右移动直到完成。

这样做,您会看到当您添加 %{LOGLEVEL} 时它会停止工作。为什么?因为“LOG”对于 LOGLEVEL 无效。它期待诸如 DEBUG 之类的东西。改用 %{WORD} 之类的东西,它工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多