logstash grok parse 解析日志文件报错
Logstash grok parse error parsing log file
我正在尝试解析这种日志格式:
http://localhost:8080/,200,OK,11382,date=Mon 27 Apr 2015 12:56:33 GMT;newheader=foo;connection=close;content-type=text/html;charset=ISO-8859-1;server=Apache-Coyote/1.1;
使用此配置文件:
input {
stdin{}
}
filter {
grok {
match => [ "message" , "%{URI:uriaccessed},%{NUMBER:httpcode},%{WORD:httpcodeverb},%{NUMBER:bytes},date=%{TIMESTAMP_ISO8601:logtimestamp};%{GREEDYDATA:msg}"]
}
mutate{
convert => ["httpcode","integer"]
convert => ["bytes","integer"]
}
date {
locale => "en"
match => [ "logtimestamp" , "EEE dd MMM yyy HH:mm:ss" ] #Mon 27 Apr 2015 12:56:33 GMT
}
}
output {
stdout { codec => rubydebug }
}
但是,我遇到了 grok prase 失败,我不确定是什么问题。
似乎无法指出导致问题的模式。
任何 thoughts/comments 将不胜感激。
TIMESTAMP_ISO8601 匹配:
%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
而且你的日期不是那种格式。似乎没有适合您的预定义模式,所以这里有一个可行的模式:
%{DAY} +%{MONTHDAY} %{MONTH} %{YEAR} +%{TIME} %{WORD}
请注意,%{TZ} 不喜欢 GMT,所以我使用了 %{WORD}。
祝你好运。
您的日志示例中的时间戳与 TIMESTAMP_ISO8601 模式不匹配。您可以尝试其他模式,但我怀疑 "Mon" 和“27”之间的双 space 会有问题,而且我没有看到 "GMT" 匹配 TZ 模式。您可以尝试使用 TZORGMT 条目添加您自己的模式文件,然后像这样在匹配中使用它:
TZORGMT (?:[PMCE][SD]T|UTC|GMT)
%{URI:uriaccessed},%{NUMBER:httpcode},%{WORD:httpcodeverb},%{NUMBER:bytes},date=%{DAY} %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{TZORGMT}
https://grokdebug.herokuapp.com/ 的 grok 调试器有助于调试这样的事情。
如果您随后要执行日期 { match },则需要为此编写一个模式,例如:
"dd MM YYYY HH:mm:ss ZZ"
我正在尝试解析这种日志格式:
http://localhost:8080/,200,OK,11382,date=Mon 27 Apr 2015 12:56:33 GMT;newheader=foo;connection=close;content-type=text/html;charset=ISO-8859-1;server=Apache-Coyote/1.1;
使用此配置文件:
input {
stdin{}
}
filter {
grok {
match => [ "message" , "%{URI:uriaccessed},%{NUMBER:httpcode},%{WORD:httpcodeverb},%{NUMBER:bytes},date=%{TIMESTAMP_ISO8601:logtimestamp};%{GREEDYDATA:msg}"]
}
mutate{
convert => ["httpcode","integer"]
convert => ["bytes","integer"]
}
date {
locale => "en"
match => [ "logtimestamp" , "EEE dd MMM yyy HH:mm:ss" ] #Mon 27 Apr 2015 12:56:33 GMT
}
}
output {
stdout { codec => rubydebug }
}
但是,我遇到了 grok prase 失败,我不确定是什么问题。 似乎无法指出导致问题的模式。 任何 thoughts/comments 将不胜感激。
TIMESTAMP_ISO8601 匹配:
%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
而且你的日期不是那种格式。似乎没有适合您的预定义模式,所以这里有一个可行的模式:
%{DAY} +%{MONTHDAY} %{MONTH} %{YEAR} +%{TIME} %{WORD}
请注意,%{TZ} 不喜欢 GMT,所以我使用了 %{WORD}。
祝你好运。
您的日志示例中的时间戳与 TIMESTAMP_ISO8601 模式不匹配。您可以尝试其他模式,但我怀疑 "Mon" 和“27”之间的双 space 会有问题,而且我没有看到 "GMT" 匹配 TZ 模式。您可以尝试使用 TZORGMT 条目添加您自己的模式文件,然后像这样在匹配中使用它:
TZORGMT (?:[PMCE][SD]T|UTC|GMT)
%{URI:uriaccessed},%{NUMBER:httpcode},%{WORD:httpcodeverb},%{NUMBER:bytes},date=%{DAY} %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{TZORGMT}
https://grokdebug.herokuapp.com/ 的 grok 调试器有助于调试这样的事情。
如果您随后要执行日期 { match },则需要为此编写一个模式,例如:
"dd MM YYYY HH:mm:ss ZZ"