0

Ich benutze 'filebeat' als Versender und der Client sende es an redis, lese von redis mit logstash und sende es an ES.Logstash filter - halb json line parse

Ich versuche, die folgende Beispiel Zeilen zu analysieren:

09:24:01.969 watchdog - INFO - 100.140.2 PASSED: Mobile:Mobile[].popover["mc1814"].select(2,) :706<<<<<<<<<<<<<<<<<<< {"actionDuration":613}

Am Ende hat ich einen Feldnamen haben will: „ActionDuration“ mit dem Wert: 613.

Wie Sie sehen können Es ist teilweise JSON. - Ich habe versucht, grok Filter zu verwenden, mit add_field und match und ich habe versucht, ein paar Konfigurationen im Dateibeat und logstash zu ändern.

Ich verwende die Grundkonfigurationen: filebeat.conf:

filebeat.prospectors:

  • input_type: log

    paths:

    • /sketch/workspace/sanity-dev-kennel/out/*.log

    fields:

    • type: watchdog
    • BUILD_ID: 82161

Wenn es eine Möglichkeit, es in der filebeat Seite zu tun ich lieber, aber es ist auch gut in der Logstash Seite.

Vielen Dank, Moshe

Antwort

0

Diese Art von Teil Formatierung wird am besten auf der Seite Logstash behandelt, nicht den Spediteur. Die in FileBeat verfügbaren Filter/Transformationen sind dem nicht gewachsen. Eine Logstash-Filter-Pipeline ist jedoch.

filter { 
    grok { 
    match => { 
     "message" => [ "(?<plain_prefix>^.*?) (?<json_segment>{.*$)"] 
    } 
    } 
    json { 
    source => "json_segment" 
    } 
    mutate { 
    remove_field => [ "json_segment" ] 
    } 
} 

Dieses grundlegende Beispiel teilt Ihre eingehende Nachricht in zwei Felder auf. a plain_prefix und json_segment. Der json{} Filter wird dann verwendet, um die JSON-Daten in das Ereignis zu analysieren. Schließlich wird ein mutate {} Filter verwendet, um das Feld json_segment aus dem Ereignis zu entfernen, da es bereits analysiert und enthalten ist.

Hinweis: Die .*? in der plain_prefix ist kritisch in diesem Filter. Auf diese Weise wird alles von der ersten { als Teil des JSON-Segments betrachtet. Wenn Sie .* verwenden, ist das JSON-Segment alles von der letzten{, die ein Problem mit komplexen JSON-Datenstrukturen sein wird.

+0

Danke für die schnelle Antwort, Ich erhalte die folgende Fehlermeldung: „json_error“: „Fehler Dekodierung JSON: json: nicht Abstellungs Zahl in Go Wert vom Typ map [string] Schnittstelle {}“, –

+0

Es spielt keine Funktioniert mir nicht, ich benutze die ELK 5.1.1 Stack Version, BTW gibt es am Ende einige Logs ohne den JSON. –

+0

haben Sie eine Idee, es zu lösen? –