2015-01-26 81 views
1

我有一些问题让logstash识别我的模式,似乎匹配在Grok调试器(https://grokdebug.herokuapp.com/)。_grokparsefailure在匹配grok调试器模式

这与其他StackOverflow问题(logstash _grokparsefailure issues)上发现的问题类似,但不幸的是,解决方案似乎不起作用。

这些都是我想匹配日志:

Mon Jan 25 11:12:12.890 [conn44141] authenticate db: admin { authenticate: 1, user: "person", nonce: "f00000000f", key: "a0000000000e" } 

"2015-01-25 14:46:31" id=Admin  id=Admin,ou=user,dc=gooogle-wa,dc=com  a000000a  100.00.00.01 INFO dc=gooooogle-wa,dc=com "cn=user,ou=AME Users,dc=goooogle,dc=com" BARF-4  aO.access "Not Available" 100.00.00.01 

我使用分析这些模式的,分别为:

if [type] == "openam" { 
     if [file] =~ "access" { 
      grok{ 
       match => [ 'message', '\"%{TIMESTAMP_ISO8601:timestamp}\"(\s*)(%{QUOTEDSTRING:data_}|%{DATA:data_})(\s*)(%{QUOTEDSTRING:LoginID}|%{DATA:LoginID})(\s*)%{DATA:ContextID}(\s*)(\"%{DATA:IP}\"|%{IP:IP})(\s*)?%{LOGLEVEL:loglevel}(\s*)%{DATA:Domain}(\s*)\"%{DATA:LoggedBy}\"(\s*)(?<messageID>[a-zA-Z0-9._-]+)(\s*)(%{DATA:ModuleName})(\s*)\"%{DATA:NameID}\"(\s*)(%{IP:hostname}|%{GREEDYDATA:hostname}) ' 
        ] 
       add_tag => "openam_access" 
      } 
     } 
     else if [file] =~ "error" { 
      grok{ 
       match => ['message', '\"%{TIMESTAMP_ISO8601:timestamp}\"(\s*)(%{QUOTEDSTRING:data_}|%{DATA:data_}) (\s*)(%{QUOTEDSTRING:LoginID}|%{DATA:LoginID}) (\s*)%{DATA:ContextID}(\s*)(\"%{DATA:IP}\"|%{IP:IP})(\s*)?%{LOGLEVEL:loglevel}(\s*)%{DATA:Domain}(\s*)\"%{DATA:LoggedBy}\"(\s*)(?<messageID>[a-zA-Z0-9._-]+)(\s*)(%{DATA:ModuleName})(\s*)\"%{DATA:NameID}\"(\s*)(%{IP:hostname}|%{GREEDYDATA:hostname})', 
        ] 
       add_tag => "openam_error" 
      } 
     } 
} 




    if [type] == "mongo" { 
    grok { 
     match => [ 
        "message", "(?m)%{GREEDYDATA} \[conn%{NUMBER:mongoConnection}\] %{WORD:mongoCommand} %{WORD:mongoDatabase}.%{NOTSPACE:mongoCollection} %{WORD}: \{ %{GREEDYDATA:mongoStatement} \} %{GREEDYDATA} %{NUMBER:mongoElapsedTime:int}ms", 
        "message", "%{DATA:DayOfWeek} %{SYSLOGTIMESTAMP:timestamp} %{DATA:Thread} %{GREEDYDATA:msg} %{IP:ip}:%{NUMBER:port} ?#?%{NUMBER:ID}? %{GREEDYDATA:connections} ", 
        'message', '%{DATA:DayOfWeek} %{SYSLOGTIMESTAMP:timestamp} %{DATA:Thread} %{DATA:msg}: %{WORD:userType} \{ authenticate: %{NUMBER:authenticate}, user: %{QS:user}, nonce: %{QS:nonce}, key: %{QS:key} \}' 
       ] 
     add_tag => "mongodb" 
     } 

}

,你可以检查,这些模式在调试器上可以正常工作,但由于某种原因,在我的kibana仪表板上,它们会显示_grokparsefailure标记。我怀疑它要么与我逃避角色或使用{QS}/{QOUTEDSTRING}

感谢

回答

2

你的模式似乎是罚款,但与

filter { 
    grok { 
    ... 
    } 
    grok { 
    ... 
    } 
} 

你申请两个模式对所有输入字符串,第一个匹配的模式将不会匹配第二个输入字符串反之亦然。因此,你总是会得到_grokparsefailure标签。

而是执行此操作:

filter { 
    grok { 
    match => ['message', 'pattern1', 
       'message', 'pattern2'] 
    } 
} 

如果你真的要使用不同的神交过滤器,与消息的潜行高峰状态将其列入:

filter { 
    if [message] =~ /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)/{ 
    grok { 
     match => ['message', 'pattern1'] 
    } 
    } 
    ... 
} 

这样速度显然会慢和手段你会有更多的正则表达式来维护。

+0

感谢您回答Magnus。但是,我并不认为包含整个.conf文件。我还没有包含整个文件,因为我还没有清理它,但我已经包含了更多我认为是必需的代码。如果您希望我粘贴整个文件,请告诉我。否则,如果您可以再次查看问题,我将不胜感激。 – FruitPunchSamurai 2015-01-27 14:31:43

0

我已经想通了。似乎有另一个错误是阻止我的logstash conf更新。强烈推荐./logstash --configtest对于任何在类似地点的人。