2017-02-01 3 views
1

Ich habe einige JSON aus einem Andockfensters Behälter über die Fahrer wie FluentD emittiert wird? Wenn diese Daten durch fluentD erfasst wird, endet es so nach oben, wie erwartet:Parsing innere JSON innen FluentD

2017-02-01 06:29:15 +0000 docker.6faad650faa6: {"log":"{\"timeMillis\":1485917543709,\"thread\":\"main\",\"level\":\"INFO\",\"loggerName\":\"com.imageintelligence.ava.api.Boot\",\"message\":\"{\\\"dom\\\":\\\"DOM\\\"}\",\"loggerFqcn\":\"org.apache.logging.slf4j.Log4jLogger\",\"threadId\":1,\"threadPriority\":5}\r","com.amazonaws.ecs.cluster":"dombou","container_id":"6faad650faa6012af4f32df79901b42488543a5e6e53517fe3579b01ab2b6862","container_name":"/upbeat_booth","source":"stdout"}` 

Ich benutze einen Filter wie so, die JSON zu analysieren:

<filter docker.**> 
    @type parser 
    format json 
    key_name log 
    reserve_data true 
    hash_value_field log 
</filter> 

und ich mit halb am Ende -sanitized JSON:

2017-02-01 06:32:10 +0000 docker.68c794f7f694: {"source":"stdout","log":{"timeMillis":1485917543709,"thread":"main","level":"INFO","loggerName":"com.imageintelligence.ava.api.Boot","message":"{\"dom\":\"DOM\"}","loggerFqcn":"org.apache.logging.slf4j.Log4jLogger","threadId":1,"threadPriority":5},"com.amazonaws.ecs.cluster":"dombou","container_id":"68c794f7f6948d4261b9497947834651abbf766e9aa51a76f39d6895b7a9ac18","container_name":"/sad_hamilton"} 

das Problem ist, das message Feld noch ein String ist entkam JSON Feld. Irgendwelche Ratschläge, wie ich dieses innere JSON-Feld auch analysieren kann? Wie staple ich Filter?

Antwort

0

Bitte versuchen Sie folgendes Plugin und lassen Sie mich wissen, wie es geht:

https://github.com/edsiper/fluent-plugin-docker

+0

Mein Verständnis ist, dass dies für das Feld 'log' funktioniert, aber nichts in das Protokollfeld. Ich brauche etwas, das rekursiv mit den Innereien des Baumstamms umgehen wird. Ich werde es versuchen, obwohl –

+0

Bestätigt: Es analysiert nicht die innere JSON, wie ich will –

0

Sie sequenzielle Filter könnten versuchen:

<filter docker.**> 
    @type parser 
    key_name log 
    format json 
    reserve_data true 
</filter> 

<filter docker.*.embeded_json.**> 
    @type parser 
    key_name message 
    format json 
    reserve_data true 
</filter> 
0

einen Filter definieren und verwenden json_in_json für fluentd pluggin. Nach diesem Filter definieren Sie den Matcher für diesen Filter, um ihn weiter zu bearbeiten.

Thats hilft Ihnen, verschachtelte json zu parsen. U muss möglicherweise auch hinzugefügt werden gem install fluent-plugin-json-in-json, wenn es nicht bereits vorhanden ist. Ref - https://github.com/gmr/fluent-plugin-json-in-json