2015-09-29 183 views
1

我正在解析IIS日志,当所有模式都在配置文件中时,我有一切工作。logstash/grok模式文件

我想拿出所有的模式,并把它们放入一个模式文件,但似乎无法让它工作。

我有什么: 日志例如:

2015-09-08 16点02分23秒GET/l8Wc2pt1FMvzsCEJ /测试/ restapiname

2015-09-08 16点02分24秒GET/l8Wc2pt1FMvzsCEJ /测试/ ifSoap/soapapiname 神交它的工作原理:

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 {  
    patterns_dir => "C:/LogProject/LogStash/patterns" 
    match => [ "message", "IISLOGS" ] 
    } 

有什么建议?

回答

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}) 

这个作品在神交调试器为您给出的实例。第一结果在​​,第二结果在soapapiname: soapapiname

+0

Thanks Hurb。这工作。模式文件只是简单的簿记。当我尝试编辑任何东西时,真正的大配置文件变得非常复杂。 – Dhrumil