5 votes

logstash filter comment créer deux (ou plus) sorties pour une seule entrée

Je reçois via http poller one json

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

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

personne :

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

adresse :

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

ce qui signifie que j'ai un événement dans l'entrée

dans la phase d'entrée en obtenant une entrée :

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

dans la phase de filtrage, je voudrais :

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

dans la phase de sortie, je voudrais :

  1. envoyer le type P à P dans ES
  2. envoyer A à A type dans ES

4voto

Val Points 94829

Vous pouvez y parvenir grâce à la fonction clone filtre .

Tout d'abord, vous devez installer le plugin qui n'est pas intégré par défaut :

bin/logstash-plugin install logstash-filter-clone

Ensuite, vous pouvez modifier votre configuration Logstash comme suit :

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}"
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X