2017-02-09 6 views
0

Я следующий формат данных JSON, что я посылаю к logstash например прослушивает HTTP конечнойLogstash: отправить различные поля JSon для различных типов в Elasticsearch

{ 
    client: "c", 
    pageInfo: ["a","b","c"], 
    restInfo: ["r","s","t"] 
} 

Моя цель состоит в том, чтобы направить этот вклад конечная точка elasticsearch как два разных типа в одном и том же индексе; например

PUT elasticsearchhost:port/myindex/pageInfo 
     { client: "c", pageInfo: ["a","b","c"] } 

PUT elasticsearchhost:port/myindex/restInfo 
     { client: "c", restInfo: ["r","s","t"] } 

Я попытался с некоторыми фильтрами в logstash (сплит, мутировать, Grok), но я не могу понять, как выполнить это очень специфический раскол или если я должен изменить свою конфигурацию также в выходной секции

ответ

1

Для клонирования событий вам необходимо использовать clone, а затем изменить клоны.

Например:

filter { 
    clone { clones => ["pageInfo", "restInfo" ] } 
    if [type]=="pageInfo" { 
    mutate { 
     remove_field => "restInfo" 
    } 
    } 
    if [type] == "restInfo" { 
    mutate { 
     remove_field => "pageInfo" 
    } 
    } 
} 

А потом на вашем elasticsearch выходе, не забудьте включить document_type => "%{type}"

+0

спасибо, это работает! Таким образом, он создает три объекта, связанных с одним и тем же событием; есть ли способ иметь только один клон и ссылаться на исходное сообщение в выражении «if»? каково будет исходное значение типа для исходного сообщения? – alexlipa

+0

Тип оригинального события - это то, что вы установили на входе. – Alcanzar

+0

Вы также можете сделать else, если и затем окончательный else {drop {}} – Alcanzar

 Смежные вопросы

  • Нет связанных вопросов^_^