mysql 日志的 Logstash Grok 模式

Logstash Grok Pattern for mysql logs

这是我正在解析的示例日志模式。我正在使用 grok,但它并不完全符合我的预期

180528 8:46:26 2 Query  SELECT 1

要解析此日志,我的 grok 模式是

%{NUMBER:date} %{NOTSPACE:time}%{INT:pid}%{GREEDYDATA:message}

grok 调试器的输出是

> {   "date": [
>     [
>       "180528"
>     ]   ],   "time": [
>     [
>       "8:46:2"
>     ]   ],   "pid": [
>     [
>       "6"
>     ]   ],   "message": [
>     [
>       " 2 Query\tSELECT 1"
>     ]   ] }

如果您在输出中观察到,pid 正在从时间中提取,而实际 pid 2 正在合并到消息中。不确定这里出了什么问题。

为什么不能将您的时间与 TIME 模式相匹配呢?将它与等于 \S+NOTSPACE 匹配并匹配任何非空白字符(等于 [^\r\n\t\f\v ]

是没有意义的

您可以使用 TIME 模式作为时间值,INT 用于 pid,如下所示,

%{NUMBER:date}\s%{TIME:time}\s%{INT:pid}\s%{GREEDYDATA:message}

这会给你,

{
  "date": [
    [
      "180528"
    ]
  ],
  "BASE10NUM": [
    [
      "180528"
    ]
  ],
  "time": [
    [
      "8:46:26"
    ]
  ],
  "HOUR": [
    [
      "8"
    ]
  ],
  "MINUTE": [
    [
      "46"
    ]
  ],
  "SECOND": [
    [
      "26"
    ]
  ],
  "pid": [
    [
      "2"
    ]
  ],
  "message": [
    [
      "Query  SELECT 1"
    ]
  ]
}