Назад | Перейти на главную страницу

Nagios отслеживает процесс по pid-файлу

Есть ли возможность контролировать процессы с помощью 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 информация от ХОСТ-РЕСУРСЫ-МИБ.

  1. Установить net-snmp на удаленном хосте
  2. Отредактируйте snmp.conf файл, как показано ниже:

    rocommunity s3cret
    view    systemview    included   .1.3.6.1.2.1.1
    view    systemview    included   .1.3.6.1.2.1.25
    
  3. На хосте мониторинга определите check_snmp команду примерно так:

    define command{
        command_name    check_snmp
        command_line    $USER1$/check_snmp -H $HOSTADDRESS$ -P $ARG1$ -o $ARG2$ -C $ARG3$ -r $ARG4$
    }
    
  4. И наконец, создайте определение сервиса:

        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

Или есть причина, по которой вы не можете полагаться на имя процесса для проверки того, что он запущен?