2017-01-01 6 views
0

Ich habe ein Array, das ein Objekt mit einem Schlüssel und Wert enthält. Ich würde gerne überprüfen, ob das Feld "Schlüssel" gleich ist.Logstash - finde in Array wo das Objektfeld

Dies funktioniert -

if "MyTest" in [doc][customInput][tags][0][key]    
mutate { add_field => {"[doc][test]" => "5555"}}    

Aber ich hart, um die [0] Index codiert, könnte der entsprechende Eintrag nicht der erste in der Reihe sein.

Wie kann ich es schreiben?

+0

es ist ziemlich unklar, hier „der entsprechende Eintrag möglicherweise nicht die ersten in der Reihe "? Selbst wenn es nicht das erste Element in einem Array ist, wird es trotzdem das ganze Array suchen? – Kulasangar

+0

@Darth_Vader - Es wird das gesamte Array durchsuchen, aber wenn das Array primitive Strings enthielt, wäre es in Ordnung, das Problem ist, dass ich auf das "Schlüssel" -Feld innerhalb des Objekts zugreifen muss (das Array jedes Elements ist ein Objekt) und das ist was Ich weiß nicht, ohne hart zu programmieren den Index [0]? – BornToCode

Antwort

0

landete ich zu diesem Zweck mit einem Rubin Filter nach oben (konnte keine Art und Weise finden, ohne es zu tun):

filter { 
    ruby { 
     code => " 
       myArray = event['doc']['customInput']['tags'] 
       if myArray && myArray.detect{|t| t['key'] == "MyTest"}  
        event['doc']['test'] = tags_array.detect{|t| t['key'] == 'MyTest'}['value'] 
       end   
       " 
     } 
     }