2013-12-17 7 views
12

Auf der Suche nach ein wenig Hilfe beim Start ... Ich habe Logstash installiert (sowie ElasticSearch), aber ich habe mit meinem ersten Filter zu kämpfen.Erste Schritte mit Logstash-Filtern

Als Test habe ich es konfiguriert, aus einer getrimmten Protokolldatei zu lesen, die 6 Zeilen enthält, jede Zeile beginnt mit einem Zeitstempel wie [11/5/13 4: 09: 21: 327 PST] gefolgt durch eine Reihe anderer Daten.

Für jetzt habe ich meine Conf-Datei eingestellt, um diese Datei zu lesen, und ich versuche, einen sehr einfachen Grok-Filter zu den Zeilen zu machen, vielleicht den Zeitstempel und dann den Rest der Daten zu greifen (von wo ich kann fange an, es aufzuteilen). Hier

ist, was ich habe:

input { 
    file { 
    type => "chris" 
    path => "/home/chris/Documents/test.log" 
    } 
} 
filter { 
    grok { 
    type => "chris" 
    pattern => "%{GREEDYDATA:logline}" 
    } 
} 
output { 
    stdout {debug => true debug_format => "json"} 
} 

ich irgendwie erwartete (in der Hoffnung), dass, wenn ich Logstash lief würde es jede Zeile passen und gibt es, dann könnte ich die Linien zu brechen beginnen nach unten und Filterung Ich stelle das Muster ein, aber da ich dieses erste grundlegende Bit nicht zur Arbeit bekomme, bin ich etwas ratlos.

Hat jemand eine ähnliche Conf-Datei, die sie teilen könnten? Die meisten Beispiele, die ich finden kann, sind fortgeschrittener und ich stehe fest und versuche, aus dem Tor zu kommen.

Danke,

Chris.

+0

Welche Version von Logstash verwenden Sie? [Grok] (http://logstash.net/docs/1.3.1/filters/grok) hat seit 1.2 oder so keinen "Muster" -Parameter gehabt. – rutter

Antwort

12

Beginnen Sie mit dem Entfernen des Inhalts des Filters.

Die Dokumentation für die aktuelle Version (1.3.2) von logstash grok Filter-Plugin sind hier http://logstash.net/docs/1.3.2/filters/grok

Vergewissern Sie sich auf der richtigen Version der Dokumentation für die Version von logstash Sie heruntergeladen haben, suchen.

Ein Beispiel Grok Filter wäre:

filter { 
    grok { 
    match => [ "message", "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" ] 
    } 
} 

Aber dies ist unwahrscheinlich, dass Ihre Daten übereinstimmen.

"Nachricht" ist das Standardfeld, in dem Ihr gesamtes Protokoll endet, also ist es wahrscheinlich eine gute Wahl für Sie auch.

Der nächste Teil erstellt 5 neue Felder, Client, Methode, Anfrage, Bytes und Dauer durch Lesen der Logline und der passenden Teile mit den vordefinierten Grok-Mustern, wie IP, WORD, etc. Dies müssten Sie ändern.

mit

filter { 
    grok { 
    match => [ "message", "%{GREEDYDATA:logline}" ] 
    } 
} 

Welche tatsächlich nur duplizieren das Nachrichtenfeld in einem separaten logline Feld beginnen, aber irgendwo beginnen soll. Wenn Sie dem Filter weitere Grok-Muster hinzufügen, enthält das Logline-Feld nur etwas Grok-Muster.

Sie können Ihre Grok Muster hier testen http://grokdebug.herokuapp.com/

Sie wollen wahrscheinlich die grok Filter verwenden, um den Zeitstempel in seinem eigenen Feld grok und dann die Datumsfilter verwenden tatsächlich zu verwenden, die als Protokolle Zeitstempel .

filter { 
    grok { 
    match => [ "message", "%{TIMESTAMP_ISO8601:syslog_timestamp} %{GREEDYDATA:syslog5424_msg}" ] 
    } 
    date { 
    match => [ "syslog_timestamp", "ISO8601" ] 
    } 
} 

TIMESTAMP_ISO8601 Spiele Zeitstempel in einem sehr ausführlichen Format (http://grokdebug.herokuapp.com/patterns#), kann dies nicht für Sie arbeiten.

ISO8601 ist dasselbe Format, das für den Datumsfilter vorgegeben ist. Sie müssen hier möglicherweise stattdessen manuell Ihr Datumsformat angeben. Siehe die Dokumentation: http://logstash.net/docs/1.3.2/filters/date