2016-11-01 7 views
0

Здесь есть система реального времени, которая передает текстовые сообщения в общую папку. Существует также filebeat, который переходит эти сообщения logstash, затем logstash анализирует их и выводит на elasticsearch. Проблема заключается в том, что содержимое некоторых сообщений, помещенных в общую папку, неверно, и правильная форма будет отправлена ​​после интервала, а иногда правильная форма приходит раньше, чем неправильная. Каждый msg имеет поле, называемое счетчиком, и неправильный счетчик msg меньше, чем правильный.Есть ли способ запросить документ в elasticsearch из logstash с использованием идентификатора документа

Можно ли запрашивать/искать записи elasticsearch на основе document_id каждый раз, когда новое сообщение принимается с помощью logstash и проверяет, были ли правильные msg уже существуют в elasticsearch или текущий msg является правильным и его необходимо заменить на Старый.

Обратите внимание, что для доступа к каждому сообщению используется определенный document_id и может быть одинаковым для обоих сообщений с исправлением/неправильным. document_id, как показано ниже:

output { 

    elasticsearch { 
    document_id => "%{my_id}" 
     . 
     . 
     . 
     } 
} 

ответ

0

Да, вы можете использовать elasticsearch logstash filter, который позволит вам получить один документ, соответствующий запрос. В вашем случае, вы можете запросить для идентификатора и вы получите документ:

filter { 
    elasticsearch { 
     hosts => ["localhost:9200"] 
     query => "_id:%{my_id}" 
     fields => { 
     "field1" => "fieldA" 
     "field2" => "fieldB" 
     } 
    } 
} 

После этого фильтра выполняется, вы будете иметь field1 и field2 копируются в текущее событие, как fieldA и fieldB и вы можете запустить если/then/else проверяет ваше событие по своему усмотрению.