2016-07-08 91 views
0

我正在使用Logstash來讀取某些日誌文件。 這裏有一些數據源的記錄Logstash Grok分析問題

<2016-07-07 00:31:01> Start 
<2016-07-07 00:31:59> Warning - Export_Sysem 6 (1) => No records to be exported 
<2016-07-07 00:32:22> Export2CICAP (04) => Export PO : 34 record(s) 
<2016-07-07 00:32:22> Export2CICAP (04) => Export CO : 87 record(s) 
<2016-07-07 00:32:22> Export2CICAP (04) => Export FC 

這是我的conf文件

grok{ 
    match => {"message" => [ 
    '<%{TIMESTAMP_ISO8601:Timestamp}> (%{WORD:Level} -)%{NOTSPACE:Job_Code} => %{GREEDYDATA:message}',  
    '<%{TIMESTAMP_ISO8601:Timestamp}> %{WORD:Parameter} - %{GREEDYDATA:Message}', 
    '<%{TIMESTAMP_ISO8601:Timestamp}> %{WORD:Status}', 
    ]} 
} 

這是我的輸出

{ 
     "message" => "??2016-07-07 00:31:01> Start\r?", 
     "@version" => "1", 
    "@timestamp" => "2016-07-08T03:22:01.076Z", 
      "path" => "C:/CIGNA/Export.log", 
      "host" => "SIMSPad", 
      "type" => "txt", 
      "tags" => [ 
     [0] "_grokparsefailure" 
    ] 
} 
{ 
     "message" => "<2016-07-07 00:31:59> Warning - Export_Sysem 6 (1) => No records to be exported\r?", 
     "@version" => "1", 
    "@timestamp" => "2016-07-06T16:31:59.000Z", 
      "path" => "C:/CIGNA/Export.log", 
      "host" => "SIMSPad", 
      "type" => "txt", 
    "Timestamp" => "2016-07-07 00:31:59", 
    "Parameter" => "Warning", 
     "Message" => "Export_Sysem 6 (1) => No records to be exported\r?" 
} 
{ 
     "message" => "<2016-07-07 00:32:22> Export2CICAP (04) => Export CO : 87 record(s)\r?", 
     "@version" => "1", 
    "@timestamp" => "2016-07-06T16:32:22.000Z", 
      "path" => "C:/CIGNA/Export.log", 
      "host" => "SIMSPad", 
      "type" => "txt", 
    "Timestamp" => "2016-07-07 00:32:22", 
     "Status" => "Export2CICAP" 
} 

由於從輸出看到,第一輸出消息的一部分有一個grok解析錯誤,其他2個結果沒有完全解析消息。我應該如何修改grok語句,以便它可以完全解析消息?

回答

1

對於第一條消息,問題來自兩個??,它們沒有出現在該模式中,因此創建了_grokparsefailure

第二個和第三個消息沒有完全解析,因爲前兩個模式與消息不匹配,所以消息由最後一個模式解析。

對於第二個消息,如果你想與第一圖案(<%{TIMESTAMP_ISO8601:Timestamp}> (%{WORD:Level} -)%{NOTSPACE:Job_Code} => %{GREEDYDATA:message})來解析它,你的模式是錯誤的:

  • ()各地%{WORD:Level} -沒有在日誌中出現。
  • :Timestamp}>%{WORD:Level}之間沒有空格。在日誌中,模式中有兩個並且只有一個。請注意,您可以使用%{SPACE}來避免這一問題沒有任何空格字符的序列(因爲%{SPACE}將匹配任何數量的空格)
  • %{NOTSPACE:Job_Code}比賽,但在Export_Sysem 6 (1)的空間,所以Job_CodeExport_Sysem=>中的模式將阻止與第一個模式的成功匹配。

正確模式:

<%{TIMESTAMP_ISO8601:Timestamp}> %{WORD:Level} - %{DATA:Job_Code} => %{GREEDYDATA:message} 

對於第三個消息,我不知道應該用哪一種模式。

如果您添加更多詳細信息,我會更新我的答案。

參考:grok pattern definitions

+0

對於第一消息,我使用十六進制編輯器,並已發現,??來自馬克的字節。我該如何擺脫? –

+0

@KennedyKan也許http://stackoverflow.com/questions/1068650/using-awk-to-remove-the-byte-order-mark可以提供幫助。或者因爲它只在第一行,你可以忽略它 – baudsp

+0

我已經查看了鏈接中的信息,但我不知道如何掃描我將這些想法合併到logstash中。有沒有可以完成這項工作的logstash命令,或者logstash能夠解析十六進制字符? –