以下日志的 GROK 模式

GROK Pattern for following log

我很难想出以下日志条目的模式。

[INFO ] 2020-02-07 16:11:56.148 [localhost-startStop-1] DOMUtilities - System property DocumentBuilderCacheBlockSize is not defined, using default 25

以下是我的。

  %{LOGLEVEL:loglevel} %{YEAR} %{MONTH} %{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}[%{DATA:threadName}\]\s+\%{DATA:javafile}\s[-:]\s+%{GREEDYDATA:message}

任何人都可以告诉我我做错了什么吗?我知道问题出在日期格式上,但我就是找不到答案。

您的 grok 模式有多个问题(顺序基于 grok 模式中的出现):

  • 日志级别在方括号内。 LOGLEVEL 模式不包含除已定义单词之外的任何字符。此外,在日志级别之后和右方括号之前有一个空格
  • 您的时间戳的日期值(年、月、日)由您根本没有指定的连字符分隔。
  • MONTH 模式用于完整的 and/or 缩写月份 names,例如FebFebruary,您需要使用使用数字的 MONTHNUM2 模式。
  • 秒数和线程名之间有空格
  • 您需要转义 [%{DATA:threadName}\] 处的左方括号,因为它是正则表达式中的特殊字符
  • %{DATA:javafile}
  • 前不需要反斜杠

请更详细地查看 logstash grok-patterns 及其定义。

根据您提供的示例日志,我想出了以下模式:

^\[%{LOGLEVEL:loglevel}\s?+\]\s+%{YEAR}-%{MONTHNUM2}-%{MONTHDAY}\s+%{HOUR}:%{MINUTE}:%{SECOND}\s+\[%{DATA:threadName}\]\s+%{DATA:javafile}\s[-:]\s+%{GREEDYDATA:message}

您可以在 this page 上验证您的模式。

希望能帮到你