2017-09-28 39 views
5

Dostaję poprzez http poller jeden jsonlogstash filtr jak utworzyć dwie (lub powyżej) wyjść do jednego wejścia

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

i chciałbym to do wygenerowania dwóch dokument w moim wyjściu:

osoba:

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

adres:

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

sens mam jedno zdarzenie w wejściu

w fazie wprowadzania coraz jedno wejście:

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

w fazie filtra Chciałbym:

  1. tworzyć osoba zdarzenie (oznacz jako P)
  2. utwórz zdarzenie adresu (oznacz je jako A)

w fazie wyjściowej Chciałbym:

  1. send P do typu P w Es
  2. Wyślij do typu w ES

Odpowiedz

3

Można to osiągnąć z clone filter.

Najpierw trzeba zainstalować wtyczkę, która nie jest dołączany domyślnie:

bin/logstash-plugin install logstash-filter-clone 

Następnie można zmodyfikować Logstash config tak:

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 można również dokonać dla każdego rodzaju url ? i nie dla wszystkich adresów URL? –

+0

Możesz użyć kilku wejść 'http_poller' :-) – Val

+0

Tak, mam problem z ściągaczem to możliwość pracy bez weryfikacji ssl, która jest mi potrzebna, każda propozycja? –