2015-01-26 56 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對於任何在類似地點的人。