logstash / grok 模式文件
logstash / grok pattern file
我正在解析 IIS 日志,当所有模式都在配置文件中时,一切正常。
我想取出所有的图案并将它们放入图案文件中,但似乎无法正常工作。
我有:
日志示例:
2015-09-08 16:02:23 获取 /l8Wc2pt1FMvzsCEJ/test/restapiname
2015-09-08 16:02:24 获取 /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}"
这行得通。但是我这个url的组合太多了,想把完整的东西放在一个文件里,所以我只需要维护1个文件。
这似乎不起作用
模式文件:
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" ]
}
有什么建议吗?
我个人建议保留 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
。
我正在解析 IIS 日志,当所有模式都在配置文件中时,一切正常。
我想取出所有的图案并将它们放入图案文件中,但似乎无法正常工作。
我有: 日志示例:
2015-09-08 16:02:23 获取 /l8Wc2pt1FMvzsCEJ/test/restapiname
2015-09-08 16:02:24 获取 /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}"
这行得通。但是我这个url的组合太多了,想把完整的东西放在一个文件里,所以我只需要维护1个文件。
这似乎不起作用
模式文件:
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" ]
}
有什么建议吗?
我个人建议保留 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
。