Есть ли возможность контролировать процессы с помощью nagios? Я нашел команду check_procs, которую я не могу использовать, потому что она не позволяет мне указать файл для чтения PID. Кроме того, я, кажется, не нашел ничего об этом в Google, так что, возможно, у меня есть некоторые неправильные представления о том, что на самом деле должны делать nagios?
Мой сценарий таков, что у меня есть веб-сервер, на котором есть несколько VirtualHosts. Я могу легко отслеживать их с помощью check_http.
Однако один из сайтов зависит от фонового процесса, который я также хочу отслеживать с помощью nagios.
nagios проверяет процессы по разным проверкам, а не по PID. Все службы (например, HTTP, MySQL, DNS, ...) имеют отдельные настраиваемые проверки.
Например, у меня есть веб-сервер и DNS-сервер. Затем я бы использовал плагин check_http и check_dns и заставил nagios выполнять поиск DNS для одного из доменов, для которого я размещаю DNS, и посмотреть, работает ли все еще веб-сервер.
Если служба не работает должным образом, nagios покажет сигнал тревоги. То же самое для проверки веб-сервера и других. Команда check_procs используется, чтобы увидеть, не запущено ли на вашем сервере несколько процессов одновременно (перегрузка).
Все проверки в nagios можно настроить с разными параметрами.
На самом деле решение этой проблемы - написать чек, который контролирует ваш фоновый процесс на предмет правильной работы. Если вы действительно хотите убедиться, что что-то работает с заданным PID, сценарий, который просто запускается pgrep $(cat /path/to/pidfile)
будет работать, но это переполнено ложноположительным потенциалом - если ваш процесс умер, тогда что-то еще будет запущено и получит тот же PID, тогда ваша проверка процесса будет успешной, а не должна.
В правильный способ сделать это - отключить код демонизации в вашей службе и запустить его под чем-то вроде daemontools
- затем, когда он взорвется, он автоматически перезапустится. Затем вам также необходимо отслеживать функциональность, чтобы определять моменты, когда процесс не умирает, но почему-то не работает должным образом.
Вы можете сделать это, потянув hrSWRunName
информация от ХОСТ-РЕСУРСЫ-МИБ.
net-snmp
на удаленном хостеОтредактируйте snmp.conf
файл, как показано ниже:
rocommunity s3cret
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25
На хосте мониторинга определите check_snmp
команду примерно так:
define command{
command_name check_snmp
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P $ARG1$ -o $ARG2$ -C $ARG3$ -r $ARG4$
}
И наконец, создайте определение сервиса:
define service{
use generic-service
host_name remote_host
service_description <your_service_name>
check_command check_snmp!2c!HOST-RESOURCES-MIB::hrSWRunName.<your_service_pid>!s3cret!<service_name>
contact_groups admin
}
Тестирование из командной строки:
$ /usr/local/nagios/libexec/check_snmp -o HOST-RESOURCES-MIB::hrSWRunName.2910 -C s3cret -H <ip_address> -P 2c -r nrpe
SNMP OK - "nrpe" |
$ /usr/local/nagios/libexec/check_snmp -o HOST-RESOURCES-MIB::hrSWRunName.2910 -C s3cret -H <ip_address> -P 2c -r gmond
SNMP CRITICAL - *"nrpe"* |
Если фоновый процесс всегда имеет одно и то же имя, то команда check_procs будет работать.
Вот определения локальных команд для двух фоновых процессов, которые я проверяю на своем сервере. Первый (OpenDKIM) должен иметь 2 запущенных процесса, чтобы пройти тест. Во втором (dk-filter) должен быть запущен 1 процесс.
# 'check_local_opendkim' command definition
define command{
command_name check_local_opendkim
command_line $USER1$/check_procs -c 2:2 -C opendkim
}
# 'check_local_dk-milter' command definition
define command{
command_name check_local_dk-milter
command_line $USER1$/check_procs -c 1:1 -C dk-filter
}
Вот как настроить такие же проверки в файле nrpe.cfg:
command[check_opendkim]=/usr/local/nagios/libexec/check_procs -c 2:2 -C opendkim
command[check_dk-milter]=/usr/local/nagios/libexec/check_procs -c 1:1 -C dk-filter
Или есть причина, по которой вы не можете полагаться на имя процесса для проверки того, что он запущен?