2017-02-16 2 views
0

Ich versuche, herauszufinden, lesen, wie in einer JSON-Datei mit Logstash zu lesen, die alle Ereignisse auf einer einzigen Zeile enthältLogstash: Wie einzeiligen JSON

Probeneingang:

{"metadata": {"metadata fields": "metadata data"},"results": [{"events":[{"event fields": "event data"}, {"event fields": "event data"}}],"field": {"more fields": "data"}} 

Expanded JSON:

{ 
    "metadata": { 
     "metadata fields": "metadata data" 
    }, 
    "results": [{ 
      "events": [{ 
        "event fields": "event data" 
       }, { 
        "event fields": "event data" 
       } 
      }], "field": { 
      "more fields": "data" 
     } 
    } 

ich habe gerade versucht, aber die JSON-Codec verwenden, wenn ich laufe Logstash es hängt nach erfolgreich gestartet Druck. Eine andere Sache, die ich ausprobiert habe, ist das Hinzufügen einer neuen Zeile am Ende von JSON, aber das wird nicht in der Produktion funktionieren, weil ich keine Kontrolle über die Quelle der Logs habe.

Hat jemand irgendwelche Vorschläge, wie diese Logs korrekt durch Logstash analysiert werden? Unten ist meine Konfigurationsdatei. Danke im Voraus!

Config

input { 
    file { 
     path => "C:/Folder/*.json" 
     sincedb_path => "C:\nul" 
     start_position => "beginning" 
     codec => "json" 
     type => "data" 
    } 
} 
output { 
    stdout { codec => rubydebug } 
} 
+0

Das ist nicht gültig JSON. Wahrscheinlich der Grund, warum es nicht funktioniert. – Fairy

+0

Haben Sie irgendwelche Ideen, wie ich es dann analysieren kann? – Mielzus

+0

Einige aufwendige 'Grok' Filter wird den Job machen. – Fairy

Antwort

0

Ihre Eingabe eine eckige Klammer fehlt, sollte es eine haben:

{"metadata": {"metadata fields": "metadata data"},"results": [{"events":[{"event fields": "event data"}, {"event fields": "event data"} HERE ] }],"field": {"more fields": "data"}} 

Wenn der fehlende eckige Klammer vor dem gleichen Ereignis in alle Ihre Eingabedateien ist, Sie könnten versuchen gsub.

Zum Beispiel:

filter { 
mutate { 
    gsub => [ "message", "\"}}\],\"field\"\:", "\"}\]}\],\"field\"\:" ] 
} 
} 

Das paßt "}}]," Feld ": Muster und ersetzt es durch einen ähnlichen, aber mit [ an der richtigen Stelle hinzugefügt Nach dieser Mutation. Sie können fortfahren mit Json-Filter auf die Nachricht.