2016-07-08 6 views
0

Ich benutze Logstash, um einige Protokolldatei zu lesen. Hier sind einige Datenquellen DatensätzeLogstash Grok Parsing Problem

<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 

Diese meine conf Datei ist

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}', 
    ]} 
} 

Dieser Teil meiner Ausgabe ist

{ 
     "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" 
} 

Wie aus der Ausgabe zu sehen ist, die erste Ausgangsnachricht hat einen Grok-Parsing-Fehler und die anderen 2 Ergebnisse haben die Nachricht nicht vollständig analysiert. Wie sollte ich meine grok-Anweisung ändern, damit sie die Nachricht vollständig parsen kann?

Antwort

1

Für die erste Nachricht kommt das Problem von den zwei ??, die nicht im Muster erscheinen, so dass die erstellen.

Die zweite und dritte Nachricht werden nicht vollständig analysiert, da die ersten beiden Muster nicht mit den Nachrichten übereinstimmen und daher die Nachricht vom letzten Muster analysiert wird.

Für die zweite Nachricht, wenn Sie es mit dem ersten Muster (<%{TIMESTAMP_ISO8601:Timestamp}> (%{WORD:Level} -)%{NOTSPACE:Job_Code} => %{GREEDYDATA:message}) analysieren wollen, ist Ihr Muster false:

  • () um %{WORD:Level} -, die im Protokoll nicht angezeigt.
  • Zwischen :Timestamp}> und %{WORD:Level} fehlt ein Leerzeichen. Im Protokoll gibt es zwei und nur eine im Muster. Beachten Sie, dass Sie %{SPACE} verwenden können, um dieses Problem zu vermeiden (da %{SPACE} wird eine beliebige Anzahl von Raum entsprechen)
  • The %{NOTSPACE:Job_Code} Spiel eine Folge von Zeichen ohne Leerzeichen, aber es ist ein Raum, in Export_Sysem 6 (1), so dass die Job_Code wird Export_Sysem und sein => im Muster verhindert einen erfolgreichen Abgleich mit dem ersten Muster.

Correct Muster:

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

Für die dritte Nachricht, ich sehe nicht, welches Muster verwendet werden soll.

Wenn Sie weitere Details hinzufügen, werde ich meine Antwort aktualisieren.

Zum Vergleich: grok pattern definitions

+0

Für die erste Nachricht, verwende ich Hex-Editor und haben, dass die gefunden ?? kommt von Byte of Mark. Wie soll ich das loswerden? –

+0

@KennedyKan Vielleicht http://stackoverflow.com/questions/1068650/using-awk-to-remove-the-byte-order-mark kann helfen. Oder weil es nur in der ersten Zeile ist, können Sie es ignorieren – baudsp

+0

Ich habe die Informationen in den Link, aber ich weiß nicht, wie Scan ich die Ideen in Logstash integrieren. Gibt es einen Logstash-Befehl, der den Job erledigen kann oder Logstash Hex-Char analysieren kann? –