2015-05-21 9 views
7

Ich habe JSON-Datei, die ich über logstash an ES sende. Ich möchte 1 Feld (sein tiefes Feld) im JSON entfernen - NUR wenn der Wert NULL ist.Logstash - entfernen Sie ein tiefes Feld aus der JSON-Datei

Ein Teil des JSON ist:

"input": { 
     "startDate": "2015-05-27", 
     "numberOfGuests": 1, 
     "fileName": "null", 
     "existingSessionId": "XXXXXXXXXXXXX", 
     **"radius": "null",** 
     "nextItemReference": "51", 
     "longitude": -99.12, 
     "endDate": "2015-05-29", 
     "thumbnailHeight": 200, 
     "thumbnailWidth": 300, 
     "latitude": 19.42, 
     "numOfRooms": "1" 
    }, 

Teil in der logstash.conf Datei ist:

if [input.radius] == "null" { 
       mutate { 
         remove_field => [ "input.radius" ] 
       } 
     } 

Das im Inneren des Filters selbstverständlich ist.

Wie kann ich dieses Feld entfernen, wenn der Wert null ist?

Antwort

14

Verschachtelte Felder werden nicht mit [name.subfield] sondern [field][subfield] bezeichnet. Dies sollte für Sie arbeitet:

if [input][radius] == "null" { 
    mutate { 
    remove_field => [ "[input][radius]" ] 
    } 
} 

Beachten Sie, dass, wenn es kein „Eingabe“ Feld ist, die [input][radius] Referenz wird einen leeren „input“ Wörterbuch erstellen. Um zu vermeiden, dass Sie dies tun können:

if [input] and [input][radius] == "null" { 
    mutate { 
    remove_field => [ "[input][radius]" ] 
    } 
} 

Siehe Logstash documentation für Details und weitere Beispiele.

+0

Vielen Dank es funktioniert wie Charme! –