2016-03-07 2 views
0

Как я могу обнаружить ошибки и ненулевые коды выхода при выполнении скриптов на входе, например, exec-input?Обработка ошибок Logstash в exec-input

Я использую logstash для различных задач, например, для мониторинга узлов, вызывая оболочку или скрипт python, который возвращает некоторые показатели. Однако время от времени сценарии терпят неудачу, обычно с кодом выхода 1.

Проблема заключается в том, что Logstash просто игнорирует отказ, поэтому неудачная команда остается незамеченной.

Можно ли каким-либо образом перехватить отказ, чтобы хотя бы зарегистрировать ошибку?

Простой случай:

$ cat myexit.sh 
#!/bin/bash 
exit 1 


$ logstash -e 'input { exec { command => "./myexit.sh" interval=> 10 } } output { stdout {} }' -v 
Settings: Default pipeline workers: 1 
Registering Exec Input {:type=>nil, :command=>"./myexit.sh", :interval=>10, :level=>:info} 
Starting pipeline {:id=>"base", :pipeline_workers=>1, :batch_size=>125, :batch_delay=>5, :max_inflight=>125, :level=>:info} 
Pipeline started {:level=>:info} 
Logstash startup completed 
Running exec {:command=>"./myexit.sh", :level=>:info} 
Command completed {:command=>"./myexit.sh", :duration=>0.038, :level=>:info} 
2016-03-07T15:05:12.401Z 6755322742e7 

Никаких признаков того, что произошла ошибка ...

ответ

0

Из того, что я вижу в the code, Exec {} читает вывод сценария, пока труба не будет закрыта. Единственная обработка ошибок - если что-то в рубиновом коде генерирует ошибку или исключение.

Чтобы запросить эту функцию, вы должны открыть an issue.

+0

Хорошая идея. Создан https://github.com/logstash-plugins/logstash-input-exec/issues/12 – selle

0

Мое решение сделать запись сценария в STDERR:

$cat myexit.sh 
#!/bin/bash 

echo "THIS IS TEXT SENT TO STDOUT" 
>&2 echo "THIS IS TEXT SENT TO STDERR" 

Тогда при запуске logstash, STDERR скрипта будет в стандартный вывод из logstash:

logstash agent -e 'input { exec { command => "myexit.sh" interval=> 10 } } \ 
output { null { }}' -v -l /config-dir/out.log > out.stdout 

Выход стандартный вывод:

$ cat out.stdout 
Sending logstash logs to /config-dir/out.log. 
THIS IS TEXT SENT TO STDERR 

Однако было бы неплохо иметь доступ к коду выхода сценария в некотором роде, но я могу жить без этого сейчас.

У меня установлена ​​служба logstash как служба, которая перезаписывает stdout-журналы каждый раз, когда она запускается, поэтому я планирую создать logstash-conf, который обрабатывает журналы logstash и отправляет их в подходящее место, но это еще одна история

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