我一直在尝试使用logstash grok过滤器解析示例日志文件,但无法输出区分字段。 我的示例日志如下所示 -
INFO [2016-05-26 11:54:57,741] [main]: org.eclipse.jetty.util.log:?:?- Logging initialized @5776ms`enter code here`
我要分离的是 INFO , 时间戳 , [main ] ,来自 ?:? 的两部分信息。 我在grok过滤器中尝试过的模式是 - >
match => {“message”=> “%{WORD:严重性} %{CISCOTIMESTAMP:timestamp}%{NOTSPACE}%{GREEDYDATA:logmsg}“}
但它没有正确输出模式。 可以请有人为我提供正确的grok模式匹配!! 任何相关的帮助都很有用!!
答案 0 :(得分:0)
由于目前尚不清楚您希望获得什么样的格式,我会为您提供以下过滤器:
match => { "message" => "%{LOGLEVEL:severity} *\[%{TIMESTAMP_ISO8601:timestamp}\] *\[%{WORD:tread}\]\: *%{NOTSPACE:file} *%{GREEDYDATA:msg}" }
这将有效地将您的示例拆分为:
{
"severity": [
[
"INFO"
]
],
"timestamp": [
[
"2016-05-26 11:54:57,741"
]
],
"YEAR": [
[
"2016"
]
],
"MONTHNUM": [
[
"05"
]
],
"MONTHDAY": [
[
"26"
]
],
"HOUR": [
[
"11",
null
]
],
"MINUTE": [
[
"54",
null
]
],
"SECOND": [
[
"57,741"
]
],
"ISO8601_TIMEZONE": [
[
null
]
],
"tread": [
[
"main"
]
],
"file": [
[
"org.eclipse.jetty.util.log:?:?-"
]
],
"msg": [
[
"Logging initialized @5776ms`enter code here`"
]
]
}
这不会优雅地解析:?:?-
部分,因此如果需要,请进行调整。
查看Grokdebug,这对于即时过滤器测试非常有用。