我在logstash上使用grok过滤器时遇到问题。我有这个日志:
83.149.9.216 - - [04/Jan/2015:05:13:42 +0000]
我想解析 IP 和日期。我有下面的代码,但我没有得到匹配。
^%{IPV4:req_id} - - [(?<date>%{DAY}/%{MONTH}/%{YEAR}:%{HOUR}:%{MINUTE}:%{SECOND} +0000)]
我做错了什么?谢谢!
您应该将%{DAY}
(=星期名称)更改为%{MONTHDAY}
(以匹配数字)并转义+
以将其匹配为文字+
字符:
^%{IPV4:req_id} - - [(?<date>%{MONTHDAY}/%{MONTH}/%{YEAR}:%{HOUR}:%{MINUTE}:%{SECOND} +0000)]
^^^^^^^^^^^ ^
正如Calvin Taylor所建议的那样,您可以进一步增强模式,以将任何ISO8601时区与%{ISO8601_TIMEZONE}
而不是+0000
相匹配:
^%{IPV4:req_id} - - [(?<date>%{MONTHDAY}/%{MONTH}/%{YEAR}:%{HOUR}:%{MINUTE}:%{SECOND} %{ISO8601_TIMEZONE})]
^^^^^^^^^^^^^^^^^^^
请参阅格罗克模式:
MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)