我有一个与kibana的logstash集成,并且accesslogs被发布到kibana仪表板 .
现在我有一些日志和一些模式来识别这些日志 . 模式中定义了一些过滤器,现在我看到,对于某些日志,过滤器会被识别 . 对于某些日志,过滤器不会出现 . 当我使用grok调试器测试时,模式看起来很好 . 可能是什么问题?
记录哪种模式不匹配
2015-07-31 04:02:40 0.001 377 GET /ics 302 - "1.00572FZnxXkFo2n_GlCCyf0005yG0008PD;kYjE0ZDLIPGDj9ROnG" - "10.242.5.120"
图案:
ICSACCESSTIMESTAMPSTRING %{DATE} %{TIME}
ICSWLS_ACCESS_LOG_FM1 %{ICSACCESSTIMESTAMPSTRING:icswlsaccess-logtimestamp} %{NUMBER:icswlsaccess-timetaken:float} %{NUMBER:icswlsaccess-bytes:int} %{DATA:icswlsaccess-csmethod} %{DATA:icswlsaccess-csurl} %{NUMBER:icswlsaccess-cstatus:int} "%{DATA:icswlsaccess-dmsecid}" "%{DATA:icswlsaccess-ecidcontext}" %{DATA:icswlsaccess-proxyremoteuser} %{GREEDYDATA:icswlsaccess-proxyclientip}
ICSWLS_ACCESS_LOG_FM2 %{ICSACCESSTIMESTAMPSTRING:icswlsaccess-logtimestamp} %{NUMBER:icswlsaccess-timetaken:float} %{NUMBER:icswlsaccess-bytes:int} %{DATA:icswlsaccess-csmethod} %{DATA:icswlsaccess-csurl} %{NUMBER:icswlsaccess-cstatus:int} "%{DATA:icswlsaccess-dmsecid}" %{DATA:icswlsaccess-ecidcontext} %{DATA:icswlsaccess-proxyremoteuser} %{GREEDYDATA:icswlsaccess-proxyclientip}
ICSWLS_ACCESS_LOG_FM3 %{ICSACCESSTIMESTAMPSTRING:icswlsaccess-logtimestamp} %{NUMBER:icswlsaccess-timetaken:float} %{NUMBER:icswlsaccess-bytes:int} %{DATA:icswlsaccess-csmethod} %{DATA:icswlsaccess-csurl} %{NUMBER:icswlsaccess-cstatus:int} "%{DATA:icswlsaccess-dmsecid}" "%{DATA:icswlsaccess-ecidcontext}" %{DATA:icswlsaccess-proxyremoteuser} %{GREEDYDATA:icswlsaccess-proxyclientip}
ICSWLS_ACCESS_LOG_FM4 %{ICSACCESSTIMESTAMPSTRING:icswlsaccess-logtimestamp} %{NUMBER:icswlsaccess-timetaken:float} %{NUMBER:icswlsaccess-bytes:int} %{DATA:icswlsaccess-csmethod} %{DATA:icswlsaccess-csurl} %{NUMBER:icswlsaccess-cstatus:int} "%{DATA:icswlsaccess-dmsecid}" %{DATA:icswlsaccess-ecidcontext} %{DATA:icswlsaccess-proxyremoteuser} %{GREEDYDATA:icswlsaccess-proxyclientip}
ICSWLS_ACCESS_LOG_FM5 #%{GREEDYDATA:logcomments}
ICSWLS_ACCESS_LOG %{ICSWLS_ACCESS_LOG_FM1}|%{ICSWLS_ACCESS_LOG_FM2}|%{ICSWLS_ACCESS_LOG_FM3}|%{ICSWLS_ACCESS_LOG_FM4}|%{ICSWLS_ACCESS_LOG_FM5}
我尝试的另一个例子:示例消息:
2015-08-12 13:20:48 0.002 377 GET /ics 302 - "1.0057HoLhIMPFo2n_GlCCyf0003TL000GHW;kYjE0ZDLIPGDj9ROnG" - "10.242.5.120"
图案:
ICSACCESSTIMESTAMPSTRING2 %{DATE} *%{TIME}
ICSWLS_ACCESS_LOG_FM6 %{ICSACCESSTIMESTAMPSTRING2:icswlsaccess-logtimestamp} *%{NUMBER:icswlsaccess-timetaken:float} *%{NUMBER:icswlsaccess-bytes:int} *%{DATA:icswlsaccess-csmethod} *%{DATA:icswlsaccess-csurl} *%{NUMBER:icswlsaccess-cstatus:int} *"%{DATA:icswlsaccess-dmsecid}" *"%{DATA:icswlsaccess-ecidcontext}" *%{DATA:icswlsaccess-proxyremoteuser} *%{GREEDYDATA:icswlsaccess-proxyclientip}
1 回答
在所有模式中,您已在
timetaken
和bytes
之间定义了两个空格;你的输入行只有一个 .您可以考虑使用“*”来匹配多个空格,这似乎可以简化所有模式 .
您也可以使用'“*'来使引号可选,我认为这会将所有内容组合成一个模式 .
最后,想象一下,在将5个复杂模式进行“或”运算后,你的正则表达式是什么样的 . 在每条线路上运行它都不是非常有效 . 幸运的是,您不必再这样做了 .