在日志存储上使用 grok 过滤器解析数据



我在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)?)

最新更新