logstash / grok模式文件

时间:2015-09-29 02:24:38

标签: regex logstash grok logstash-grok

我正在解析IIS日志,当所有模式都在配置文件中时,我都能正常工作。

我想取出所有模式并将它们放在一个模式文件中,但似乎无法让它工作。

我拥有的: 记录示例:

2015-09-08 16:02:23 GET / l8Wc2pt1FMvzsCEJ / test / restapiname

2015-09-08 16:02:24 GET / l8Wc2pt1FMvzsCEJ / test / ifSoap / soapapiname grok有效:

match => { "message" => [
        "%{TIMESTAMP_ISO8601:log_timestamp} %{WORD:method} \/%{WORD:orgid}\/(?i)test\/%{GREEDYDATA:restapiname}",
        "%{TIMESTAMP_ISO8601:log_timestamp} %{WORD:method} \/%{WORD:orgid}\/(?i)test\/(?i)ifsoap\/%{GREEDYDATA:soapapiname}"

这很有效。但是我有太多这个网址的组合,想要把完整的东西放在一个文件中,所以我只需要维护一个文件。

这似乎不起作用

模式文件:

IISLOGS %{TIMESTAMP_ISO8601:log_timestamp} %{WORD:method} \/%{WORD:orgid}\/(?i)test\/%{GREEDYDATA:restapiname}
IISLOGS %{TIMESTAMP_ISO8601:log_timestamp} %{WORD:method} \/%{WORD:orgid}\/(?i)test\/(?i)ifsoap\/%{GREEDYDATA:soapapiname}"

GROK档案:

grok {    
    patterns_dir => "C:/LogProject/LogStash/patterns"
    match => [ "message", "IISLOGS" ]
  } 

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我个人建议保留logstash配置中的模式。在我看来,额外的模式文件很烦人且难以维护。但是,如果由于某种原因想要使用模式文件,可以采用以下方法:

问题是你的grok模式文件中有两个不同的IISLOGS定义。您可以将不同的路径格式拆分为多种模式,并使用IISLOGS(?:%{IISPATH1}|%{IISPATH2})定义中执行逻辑

模式文件:

IISPATH1 \/%{WORD:orgid}\/(?i)test\/(?i)ifsoap\/%{GREEDYDATA:soapapiname}
IISPATH2 \/%{WORD:orgid}\/(?i)test\/%{GREEDYDATA:restapiname}
IISLOGS %{TIMESTAMP_ISO8601:log_timestamp} %{WORD:method} (?:%{IISPATH1}|%{IISPATH2})

这适用于您的给定示例的grok调试器。第一个结果为restapiname: restapiname,第二个结果为soapapiname: soapapiname