2016-04-19 3 views
1

настоящее время я использую logstash для анализа и вывода результатов нескольких аналогичных команд elasticsearch, похожее на это:Logstash выход обусловливающие связи elasticsearch

input { 
    exec { 
    type => 'hist' 
    command => '/usr/bin/somecommand' 
    interval => 900 
    codec => "json" 
    } 

    exec { 
    type => 'hist' 
    command => '/usr/bin/somecommand' 
    interval => 900 
    codec => "json" 
    } 

    exec { 
    type => 'hist' 
    command => '/usr/bin/somecommand' 
    interval => 900 
    codec => "json" 
    } 
} 

output { 
     if [type] == "hist" { 
       elasticsearch { 
         hosts => ["hostname.domain.com:9200"] 
         index => "monitor-hist-%{+YYYY-MM-dd}" 
       } 
     } 
} 

То, что я хотел бы, чтобы иметь возможность для вывода stdout или файл, если соединение с поиском elasticsearch завершается неудачно, например:

if _connectionfails_ { 
    stdout { 
      codec => rubydebug 
    } 
} 

Возможно ли это? Или любые другие рекомендации по управлению данными, когда эластичность недоступна?

+0

Вы даже получаете событие, когда вход не работает? Если нет, фильтровать или выводить нечего. Он будет регистрировать сбой, так что вы можете глотать журналы logstash в другой эластичный стек и искать ошибки таким образом. –

+1

Обычно, если соединение не выполняется, оно идет для бесконечных попыток. –

+0

@PriyanshGoel Я заметил, что здесь: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#_retry_policy, но мне не ясно, как это «буферизирует» эти данные. Поэтому скажите, что кластер отключен на 30 + минут. Было бы два прогона, которые потерпели бы неудачу, оба из них продолжают повторять попытку до тех пор, пока кластер не встанет? Сохраняются ли данные в куче во время повторной попытки? Или, возможно, временно привязан к диску? – anthozep

ответ

1

Logstash сохраняет все события в основной памяти во время обработки. Logstash отвечает на SIGTERM, пытаясь остановить входные данные и ожидание ожидающих событий для завершения обработки перед закрытием. Когда трубопровод не может быть сброшен из-за застрявшего выхода или фильтра, Logstash ждет неопределенно долго. Например, когда конвейер отправляет выходные данные в базу данных, недоступную экземпляру Logstash, экземпляр ожидает неопределенный срок после получения SIGTERM.

+0

Хорошо, мне интересно, скажем, наш кластер elasticsearch понижается посреди ночи, и мы не замечаем его в течение 8 часов. Поскольку конфигурация logstash, которую я опубликовал выше, запускается каждые 15 минут, может быть до 32 запусков данных повторно. Это может быть несколько ГБ. Итак, если logstash продолжает пытаться доставить эти данные, и он продолжает накапливаться, возможно, в какой-то момент у меня будет OutOfMemoryError? В этом случае возникает вторая часть моего вопроса. Если бы я мог запустить logstash, чтобы прервать попытку подключения через некоторое время и просто вывести данные на диск, я мог бы предотвратить это? – anthozep

+0

Если это произойдет, оно также прекратит прием входных данных. «Logstash отвечает на SIGTERM, пытаясь остановить входные данные», эта строка предлагает то же самое в моем ответе. –

+0

О, хорошо, так что он будет только повторять, чтобы доставить первый пропущенный пробег? Следующие прогоны будут отброшены или проигнорированы? – anthozep

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