2014-10-03 22 views
1

新手提醒!Logstash grok定製圖案不會產生任何字段

我有以下神交過濾器:

filter { 

     grok { 
       match => [ "message","%{DATESTAMP:timestamp}" ] 
       match => [ "message", "(?<number_after_timestamp>[0-9]{8}\s\w+)"] 
       match => [ "message", "(?<error_or_debug>(ERROR|DEBUG))"] 
       match => [ "message", "(?<first_part>ORB\.thread\.pool.*(?=\s{2}))" ] 
       match => [ "message", "(?<exception_class_name>(?<=\<Exception class name\=\s).*?\>)" ] 
       match => [ "message", "(?<exception_message>(?<=\<Exception message\=).*?(?=\>))" ] 

     } 


} 

獨立精確匹配的文本塊我需要使用神交調試測試時,每這些模式之一。在Grok調試器中,命名的模式名稱用作字段併發射得很好。但是,當我在grok調試器中使用的相同日誌事件上運行此操作時,不會發出日誌事件行或字段名稱中的任何數據。

例如異常類名模式,得到:

{ 
    "exception_class_name": [ 
    [ 
     "com.ultatica.bd.exceptions.TTFException>" 
    ] 
    ] 
} 

但是,當對數據從logstash從命令行運行 - >不是香腸!

真的很感激任何幫助。

感謝

日誌文件是這樣的:

[30/09/14 23:07:15:195 BST] 00000043 SystemOut O ERROR9 Tue Sep 30 23:07:15 BST 2014 ORB.thread.pool : 2 webuser com.ultra.bd.services.UltraticoCustomerService.processRequest API getPerson <Exception class name= com.Ultratico.bd.exceptions.UCOException> <Exception message= e05CX432182S> <UCOException Error =9> 

[30/09/14 23:07:15:200 BST] 00000043 SystemOut O ERROR9 Tue Sep 30 23:07:15 BST 2014 ORB.thread.pool : 2 webuser com.Ultratico.ecrm.framework.sessionHandler.UltraticoSessionHandler.execute <Exception class name= com.Ultratico.bd.exceptions.UCOException> <Exception message= e05CX432182S> <UCOException Error =9> 
+0

你可以添加從輸入(日誌文件等)幾行? – 2014-10-03 13:02:42

+0

編輯OP以顯示樣本日誌行 – user3202399 2014-10-03 13:08:48

+0

可能的重複[使用grok將日誌文件名添加爲logstash中的字段](http://stackoverflow.com/questions/23780000/use-grok-to-add-the-log -filename-as-a-field-in-logstash) – OhadR 2015-06-08 14:46:32

回答

3

的語法grokmatch => [ "field", "pattern1", "pattern2", "pattern3",...,"patternN"]。多個match參數將無法工作,因爲它將它們加載到散列中 - 導致它僅使用最後一個散列。

您需要創建多個grok塊每break_on_match => false做到這一點你是顯示的方式,但如果你使用第一種形式,做了充分的模式來匹配整行,這樣就可以避開不可避免的會更好_grokparsefailure s。

+0

是。就是這樣。謝謝。當我將Grok語句分開時,我現在可以看到所有的字段。非常感謝。我會研究你的建議。欣賞它。 Logstash感覺艱難.... – user3202399 2014-10-03 14:06:38

4

看着輸入,我試圖解析它的方式是使用單個匹配表達式。在logstash中,我使用多種匹配模式作爲解析不同類型日誌條目的一種方式。例如

  1. 匹配模式1 => NO
  2. 匹配模式2 =>是
  3. 匹配模式3 => NO

因此,對於你的例子,我會做這樣的事情:

filter { 
    grok {  
     break_on_match => false 
     match => [ "message", "%{SYSLOG5424SD:timestamp} %{NUMBER:number_after_timestamp} (?<forget1>.*) (?<error_or_debug>ERROR|DEBUG) %{NUMBER:process_id} (?<timestamp_2>.{7} \d{2} \d{2}:\d{2}:\d{2} \w{3} \d{4}) %{JAVACLASS:origin} : (?<first_part>.*) %{JAVACLASS:exception_class_name} (?<exception_message>.*)" ] 
     match => [ "message", "..some other pattern you want to extract.." ] 
     match => [ "message", "..some other pattern you want to extract.." ]    
    } 
} 

可以整理,但你得到的主意......

+0

謝謝安德魯。這對我來說很有意義。非常感激。 – user3202399 2014-10-03 15:37:28