Эта книга Нажатия MS делает хорошее задание объяснения этого.
Решение этого, действительно, состоит в том, чтобы выписать чек, который контролирует Ваш фоновый процесс для соответствующей функциональности. Если Вы действительно просто хотите удостовериться, что что-то работает в данном PID, сценарий, который просто работает pgrep $(cat /path/to/pidfile)
работал бы, но это переполнено ложным положительным потенциалом - если Ваш процесс умер, то что-то еще выполняет и получает тот же PID, затем Ваша проверка процесса успешно выполнится, когда это не было должно.
Надлежащий способ сделать это должно убраться прочь код daemonisation в Вашем сервисе и выполнить его под чем-то как daemontools
- затем, когда это бомбит, это будет автоматически перезапущено. Затем также необходимо контролировать функциональность, для ловли времен, когда процесс не умирает, но так или иначе не удается работать правильно.
проверки nagios обрабатывают из-за различных проверок, не PID. Все сервисы (как HTTP, MySQL, DNS...) имеют отдельные настраиваемые проверки.
Например, у меня есть веб-сервер и выполнение сервера DNS. Затем я использовал бы check_http плагин и check_dns и заставил бы nagios сделать поиск DNS для одного из доменов, для которых я размещаю DNS и вижу, работает ли веб-сервер все еще.
Если сервис не будет работать правильно, то nagios покажет предупреждение. То же для проверки веб-сервера и других. Команда check_procs используется, чтобы видеть, не работает ли Ваш сервер ко многим процессам одновременно (перегрузка).
Все регистрации nagios могут быть настроены с различными параметрами.
Если фоновый процесс всегда будет иметь то же имя, то команда check_procs будет работать.
Вот локальные определения команды для двух фоновых процессов, я проверяю свой сервер. Первое (OpenDKIM) должно иметь 2 выполнения процессов, чтобы пройти тест. Второе (dk-фильтр) должно иметь 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
Или есть ли некоторая причина, что Вы не можете полагаться на название процесса проверки, которую оно выполняет?
Можно сделать это путем получения по запросу hrSWRunName
информация от MIB ресурсов хоста.
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
На контролирующем хосте определите a 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"* |