首页 > 解决方案 > 可选字段的 GROK 模式

问题描述

我有一个日志字符串,如:

2018-08-02 12:02:25.904 [http-nio-8080-exec-1] WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver.handleTypeMismatch - Failed to bind request element

在上面的字符串[http-nio-8080-exec-1]中是一个可选字段,它可以出现在一些日志语句中。

我创建了一个 grok 模式,比如网上的一些参考资料:

%{TIMESTAMP_ISO8601:timestamp} (\[%{DATA:thread}\])? %{LOGLEVEL:level}%{SPACE}%{JAVACLASS:class}\.%{DATA:method} - %{GREEDYDATA:loggedString}

如果我删除线程名称字符串,它似乎不起作用。

标签: logstash-grok

解决方案


您需要使线程名称后面的空格字符可选:(\[%{DATA:thread}\] )?

输入:

2018-08-02 12:02:25.904 WARN  o.s.w.s.m.s.DefaultHandlerExceptionResolver.handleTypeMismatch - Failed to bind request element

图案:

%{TIMESTAMP_ISO8601:timestamp} (\[%{DATA:thread}\] )?%{LOGLEVEL:level}%{SPACE}%{JAVACLASS:class}\.%{DATA:method} - %{GREEDYDATA:loggedString}

输出:

{
  "loggedString": "Failed to bind request element",
  "method": "handleTypeMismatch",
  "level": "WARN",
  "class": "o.s.w.s.m.s.DefaultHandlerExceptionResolver",
  "timestamp": "2018-08-02 12:02:25.904"
}

推荐阅读