2017-11-28 8 views
1

Ich versuche, ein benutzerdefiniertes Muster hinzufügen, um zu Logstash Daten aus dieser Art von Log-Zeile zu erfassen:Erstellen ein benutzerdefinierter grok Muster in Logstash

[2017-11-27 12:08:22] production.INFO: {"upload duration":0.16923} 

folgte ich die Anweisungen auf Logstash guide for grok und erstellt ein Verzeichnis genannt Muster mit einer Datei in nannte es besonders die enthalten:

POSTFIX_UPLOAD_DURATION upload duration 

und hinzugefügt, um den Pfad der Konfigurationsdatei:

grok { 
     patterns_dir => ["./patterns"] 
     match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] %{POSTFIX_UPLOAD_DURATION: upload_duration} %{DATA:log_env}\.%{LOGLEVEL:severity}: %{GREEDYDATA:log_message}" } 
    } 

Allerdings erhalte ich diese Fehlermeldung:

Pipeline aborted due to error {:exception=>#<Grok::PatternError: pattern %{POSTFIX_UPLOAD_DURATION: upload_duration} not defined> 

Auch nicht enthalten einige Protokollzeilen die ‚Upload Dauer‘ Feld, wird dies die Pipeline brechen?

Antwort

0

Sie können relative Verzeichnisse verwenden, solange sie sich auf das aktuelle Arbeitsverzeichnis beziehen, in dem der Prozess startet, nicht in Bezug auf die Datei conf oder auf Logstash selbst.

0

Ich fand heraus, dass es bessere und effizientere Möglichkeit gibt, Daten mit dem JSON-Plugin zu erfassen.

Ich habe "log_payload:" in meine Protokolle eingefügt und füge die Daten ein, die ich in einem json-Objekt erfassen muss. Dann habe ich diese Pipeline verwendet, um es zu erfassen.

if ("log_payload:" in [log_message]) { 
     grok{ 
      match => {"log_message" => 'log_payload:%{DATA:json_object}}%{GREEDYDATA}'} 
     } 
     mutate{ 
      update => ["json_object", "%{[json_object]}}"] 
     } 
     json { 
      source => "json_object" 
      } 
    } 
    mutate { 
       remove_field => ["log_message", "json_object"] 
      } 
}