我正在尝试解析此日志行: - 2014-04-29 13:04:23,733 [main] INFO(api.batch.ThreadPoolWorker)此次运行的命令行选项: 这是我使用的logstash配置文件:
input {
stdin {}
}
filter {
grok {
match => [ "message", " - %{TIMESTAMP_ISO8601:time} \[%{WORD:main}\] %{LOGLEVEL:loglevel} %{JAVACLASS:class} %{DATA:mydata} "]
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
output {
elasticsearch {
host => "localhost"
}
stdout { codec => rubydebug }
}

{
"message" => " - 2014-04-29 13:04:23,733 [main] INFO (api.batch.ThreadPoolWorker) Commans run:",
"@version" => "1",
"@timestamp" => "2015-02-02T10:53:58.282Z",
"host" => "NAME_001.corp.com",
"tags" => [
[0] "_grokparsefailure"
]
}

如果有人能帮我找到问题在哪里的gork模式请。 我尝试在http://grokdebug.herokuapp.com/中解析该行,但它只解析时间戳,%{WORD}和%{LOGLEVEL}其余的被忽略!
答案 0 :(得分:0)
您的配置中有两个错误。
<强>第一强>
GROK
中的错误是JAVACLASS
,您必须在模式中加入(
)
,例如:\(%{JAVACLASS:class}\
。
<强>第二强>
date
过滤器match
有两个值,首先是您要解析的field
,所以在您的示例中它是time
,而不是timestamp
。第二个值是日期模式。您可以参考here
这是配置
input {
stdin {
}
}
filter {
grok {
match => [ "message", " - %{TIMESTAMP_ISO8601:time} \[%{WORD:main}\] %{LOGLEVEL:loglevel} \(%{JAVACLASS:class}\) %{GREEDYDATA:mydata}"
]
}
date {
match => [ "time" , "YYYY-MM-dd HH:mm:ss,SSS" ]
}
}
output
{
stdout {
codec => rubydebug
}
}
FYI。希望这可以帮到你。