2017-08-23 1 views
1

permet de dire que dans un cas donné i ai 4 champs psn1_name (en maintenant la valeur « a »), psn1_age (maintien de la valeur 10), psn2_name (maintien de la valeur « b ») , psn2_age (tenant la valeur 20) Je veux créer une personne sur le terrain de telle sorte que personne de la structure suivanteCréation d'un tableau d'objets dans Logstash

personne = [ { « name »: « a » , « âge »: 10 }, { "nom": "B" , "âge": 20 } ]

Quelqu'un peut-il suggérer comment réaliser ceci dans la section de filtre de ma configuration logstash.

Répondre

1

Soyez conscient de logstash 5 l'API des événements a changé (https://www.elastic.co/guide/en/logstash/current/event-api.html).

filter { 
    ruby { 
     code => ' 
      event.set("person", [{"name" => event.get("psn1_name"), "age" => event.get("psn1_age")}, {"name" => event.get("psn2_name"), "age" => event.get("psn2_age")}]) 
     ' 
    } 
    mutate { 
    remove_field => ["psn1_name", "psn1_age", "psn2_name", "psn2_age"] 
    } 
} 
1

Vous pouvez utiliser le filtre ruby ​​pour gérer vos données de manière plus granulaire. Ce est non testé, mais devrait vous aider à trouver votre solution:

filter { 
    ruby { 
     code => " 
       event['person'] = [{"name" => event['psn1_name'], "age" => event['psn1_age']},{"name" => event['psn2_name'], "age" => event['psn2_age']}] 
     " 
    } 
}