在我的应用程序中,我按照以下方式登录 -
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验证并且无法正常工作。我们将不胜感激。
答案 0 :(得分: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中有用的实时时间戳。^
和$
字符)以提供正则表达式引擎的提示,使表达式处理成本更低。