Logstash Grok 4年级问题

时间:2016-07-08 19:05:56

标签: logstash-grok

花了过去一小时试图为logstash设置grok过滤器。使用Grok Debugger一切都很好,直到我到达时间戳。 Grok在四位数年份窒息。

这是发送到logstash的日志文件条目:

  

Jul 8 11:54:29 192.168.1.144 1 2016-07-08T15:55:09.629Z era.somedomain.local ETAServer 1755 Syslog {“event_type”:“Threat_Event”,“ipv4”:“192.168.1.118” ,“source_uuid”:“7ecab29a-7db3-4c79-96f5-3946de54cbbf”,“出现”:“08-Jul-2016 15:54:54”,“严重性”:“警告”,“threat_type”:“木马”, “threat_name”:“HTML / Agent.V”,“scanner_id”:“HTTP过滤器”,“scan_id”:“virlog.dat”,“engine_version”:“13773(20160708)”,“object_type”:“文件”, “object_uri”:“http://malware.wicar.org/data/java_jre17_exec.html”,“action_taken”:“连接已终止”,“threat_handled”:true,“need_restart”:false,“username”:“DOMAIN \ username”,“processname”:“C: \ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe“}

我遇到的麻烦是JSON数据之前的第一部分。我的grok声明的第一部分:

  

%{MONTH} \%{MONTHDAY}%{SPACE}%{TIME}%{SPACE}%{IPV4}%{SPACE}%{NUMBER}%{SPACE}

正常工作正确识别时间戳中一年前的数字“1”。问题是当我添加以下内容时:

  

%{MONTH} \%{MONTHDAY}%{SPACE}%{TIME}%{SPACE}%{IPV4}%{SPACE}%{NUMBER}%{SPACE}%{TIMESTAMP_ISO8601}

然后我在grok调试器中得到“No Matches”。再多看一遍,似乎问题介于时间戳中数字'1'和年份的前两位之间,因为%{TIMESTAMP_ISO8601}仅使用两位数年份。

非常感谢任何建议或帮助。

1 个答案:

答案 0 :(得分:1)

深入挖掘正则表达式和Grok看起来我想通了。我将%{TIMESTAMP_ISO8601}替换为:

  

([^ \ d \ d]%{YEAR})[。/ - ]%{MONTHNUM} [./-]%{MONTHDAY} [T]%{HOUR}:?%{MINUTE}(?: :?%{SECOND})%{ISO8601_TIMEZONE}

它完美无缺。关键是%{YEAR}

前面的[^ \ d \ d]