2015-10-21 57 views
0

我試圖從具有明確定義的格式的自定義應用程序中取得日誌數據。我正在嘗試使用Grok過濾器挑選某些數據,但我沒有任何運氣。這裏是一個示例日誌:如何從LogStash中的消息中提取特定數據

- System.Data.SqlClient.SqlException (0x80131904): Arithmetic overflow error converting IDENTITY to data type int. 
Arithmetic overflow occurred. 

我想要做的是從字符串中提取出SqlException。下面是我使用的神交:

grok{ 
    match => 
      { 
       "message" => 
       [ 
        "(?m)%{DATE:TIMESTAMP_DATE}%{SPACE}%{TIME:TIMESTAMP_TIME}%{SPACE}%{WORD:LOG_LEVEL}%{SPACE}(?<THREAD>[^\s]+)%{SPACE}(?<HOST>[^\s]+)%{SPACE}%{GREEDYDATA:MESSAGE}", 

        "(?<EXCEPTION>[.*]+)" 
       ] 
      } 
} 

我已經嘗試了幾種不同的方式,但我想我不能完全理解的文檔。我期望會發生的是我在第一集中提取的所有字段都會包含第二集的結果。換句話說:

TIMESTAMP_DATE,TIMESTAMP_TIME,LOG_LEVEL,THREAD,HOST,MESSAGE,EXCEPTION 

我得到其他領域完美,這只是額外的匹配,我失蹤。任何幫助,將不勝感激。謝謝

+0

請更仔細地標記。 [tag:elki]!= [tag:elk-stack]。 –

回答

1

如果您指定多個模式默認情況下只有外觀檢查模式,直到遇到第一個匹配。如果你要匹配的兩個模式,無論第一個匹配是否是否可以改變這樣的行爲:

grok{ 
     break_on_match => false 
     match => 
     { 
      "message" => 
      [ 
       "(?m)%{DATE:TIMESTAMP_DATE}%{SPACE}%{TIME:TIMESTAMP_TIME}%{SPACE}%{WORD:LOG_LEVEL}%{SPACE}(?<THREAD>[^\s]+)%{SPACE}(?<HOST>[^\s]+)%{SPACE}%{GREEDYDATA:MESSAGE}", 

       "(?<EXCEPTION>[.*]+)" 
      ] 
     } 
} 

退房下的文檔:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-break_on_match

相關問題