2017-09-28 8 views
5

Je reçois via http Poller un JSONfiltre logstash comment créer deux (ou plus) sorties pour une entrée

{ 
"id":12345 
"name":"", 
"lastname":"", 
"age":12, 
"address":{"city":"XXXX" , "street":"ZZZZ" } 
} 

et je voudrais que cela générer deux documents dans ma sortie:

personne:

{ 
"id":12345 
"name":"", 
"lastname":"", 
"age":12 
    } 

adresse:

{ 
"city":"XXXX" , 
"street":"ZZZZ" 
    } 

sens que je suis un événement dans l'entrée

dans la phase d'entrée obtenir une entrée:

input { 
    http_poller { 
    urls => { 
     test1 => "http://localhost:8080" 
    } 
} 

dans la phase de filtrage, je voudrais:

  1. créer un évènement personne (taguer comme P)
  2. créer un événement d'adresse (marquer comme A)

dans la phase de sortie, je voudrais:

  1. envoyer P type P dans ES
  2. Envoyer A à un type dans ES

Répondre

3

Vous pouvez y parvenir avec le clone filter.

D'abord, vous devez installer le plug-in qui n'est pas fourni par défaut:

bin/logstash-plugin install logstash-filter-clone 

Ensuite, vous pouvez modifier votre config Logstash comme ceci:

input { 
    http_poller { 
    urls => { 
     test1 => "http://localhost:8080" 
    } 
    type => "A" 
    } 
} 
filter { 
    clone { 
     clones => [ "P" ] 
     add_tag => [ "P" ] 
    } 
    if [type] == "P" { 
     mutate { 
      remove_field => [ "address" ] 
     } 
    } else { 
     mutate { 
      add_tag => [ "A" ] 
      remove_field => [ "id", "name", "lastname", "age" ] 
     } 
    } 
} 
output { 
    elasticsearch { 
     hosts => ["localhost:9200"] 
     document_type => "%{type}" 
    } 
} 
+0

u peut faire aussi pour chaque type d'URL ? et pas un pour tous les urls? –

+0

Vous pouvez utiliser plusieurs entrées 'http_poller' :-) – Val

+0

Oui, le problème que j'ai avec extracteur est la capacité de travailler sans vérification SSL dont j'ai besoin, toute proposition? –