应用程序日志的Grok过滤器

问题描述 投票:0回答:1

在我的应用程序中,我的日志格式如下 -

logFormat: '%-5level [%date{yyyy-MM-dd HH:mm:ss,SSS}] [%X{appReqId}] [%X{AppUserId}] %logger{15}: %m%n'

并且该格式的输出就像

INFO  [2017-02-03 11:09:21.792372] [b9c0d838-10b3-4495-9915-e64705f02176] [ffe00000000000003ebabeca] r.c.c.f.r.MimeTypeResolver: [Tika MimeType Detection]: filename: 'N/A',  detected mime-type: 'application/msword', time taken: 2 ms

现在我希望日志的每个字段都可以在kibana查询,为此我希望logstash解析输入日志消息,似乎grok过滤器有帮助我们。如果grok过滤器能够正确过滤我的消息输出应该像

"message" => "INFO  [2017-02-03 11:09:21.792372] [b9c0d838-10b3-4495-9915-e64705f02176] [ffe00000000000003ebabeca] r.c.c.f.r.MimeTypeResolver: [Tika MimeType Detection]: filename: 'N/A',  detected mime-type: 'application/msword', time taken: 2 ms",
"appReqId" => "b9c0d838-10b3-4495-9915-e64705f02176",
"timestamp" => "2017-02-03 11:09:21.792372",
"AppUserId" => "ffe00000000000003ebabeca",
"logger" => "r.c.c.f.r.MimeTypeResolver",

我无法弄清楚如何配置logstash.conf文件,以便我得到所需的输出。我试过跟随

filter {
 grok {
match => { "message" => "%{LOGLEVEL:severity}* %{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{TIME:time} %{JAVACLASS:class}\.%{JAVAFILE:file}" }
}

}

并在grok patter varifier验证,它不起作用。任何类型的帮助将不胜感激。

logstash kibana elastic-stack logstash-grok
1个回答
1
投票

您可能会发现这样的效果更好:

^%{LOGLEVEL:security}%{SPACE}\[%{TIMESTAMP_ISO8601:timestamp}\]%{SPACE}\[%{DATA:appReqId}\]%{SPACE}\[%{DATA:AppUserId}\]%{SPACE}%{HOSTNAME:logger}:%{DATA:app_message}$

这里的见解是:

  • 使用%{SPACE}处理一个或多个空间实例,这可能以某些日志格式发生。语法中的*也可以这样做,但是这更明确地将它放在grok表达式中。
  • 使用专用的时间戳格式%{TIMESTAMP_ISO8601}而不是试图将其拆分并稍后组装。这允许稍后使用date { match => [ "timestamp", ISO8601 ] }过滤器块将其转换为在Kibana中有用的实时时间戳。
  • 直接在grok表达式中捕获括号中的属性。
  • 锚定grok表达式(^$字符)以提供正则表达式引擎的提示,使表达式处理成本更低。
© www.soinside.com 2019 - 2024. All rights reserved.