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

Я создал проверку Nagios, но она продолжает возвращать NRPE: Невозможно прочитать вывод, есть идеи, почему?

Я создал проверку Nagios, которая проверяет наш кардиостимулятор с помощью crm_mon команда. Проверка настраивается одинаково как на сервере Nagios, так и на клиентском. nrpe.cfg: Определение команды в nrpe.cfg выглядит так:

[root@Nagios_clt plugins]# grep pacemaker /etc/nagios/nrpe.cfg 
command[check_pacemaker]=/usr/bin/sudo /usr/sbin/crm_mon -s

Я провел два теста: в первом я просто использую строку, которую вы видите выше, а затем с сервера Nagios я получаю:

[root@Nagios_srv ]# /usr/lib64/nagios/plugins/check_nrpe -H 192.168.57.157 -c check_pacemaker
NRPE: Unable to read output
[root@Nagios_srv ]# /usr/lib64/nagios/plugins/check_nrpe -H 192.168.57.157
NRPE v2.14

Во втором я написал другое определение команды:

[root@Nagios_srv ]# grep pacemaker /etc/nagios/nrpe.cfg 
command[check_pacemaker]=/usr/lib64/nagios/plugins/check_pacemaker.sh

Пока /usr/lib64/nagios/plugins/check_pacemaker.sh выглядит так:

[root@Nagios_svr ]# cat /usr/lib64/nagios/plugins/check_pacemaker.sh
#!/bin/bash
/usr/bin/sudo /usr/sbin/crm_mon -s

Я chmod + x check_pacemaker.sh файл. Ничего из этого не сработало. Если я запустил check_pacemaker.sh файл локально на клиенте Nagios, я получаю правильный результат:

[root@Nagios_clt ]# /usr/lib64/nagios/plugins/check_pacemaker.sh
Ok: 2 nodes online, 10 resources configured

Если я запустил команду локально, используя check_nrpe Получаю такой результат:

[root@Nagios_clt plugins]# /usr/lib64/nagios/plugins/check_nrpe -H localhost
NRPE v2.14
[root@Nagios_clt plugins]# /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_pacemaker
NRPE: Unable to read output

Еще кое-что, что я настроил:

[root@Nagios_clt plugins]# grep Defaults /etc/sudoers
#Defaults    requiretty
[root@Nagios_clt plugins]# grep nagios /etc/sudoers
nagios  ALL=NOPASSWD:/usr/lib64/nagios/plugins/*

Команда check_command выглядит так:

define command{
        command_name    check_pacemaker
        command_line    /usr/lib64/nagios/plugins/check_pacemaker.sh
        }
[root@Nagios_clt plugins]# service iptables status
iptables: Firewall is not running.

Другие проверки на этом сервере работают с использованием nrpe: И я не понимаю почему, у кого-нибудь есть идеи?

Ваша проблема заключается в отсутствии ясности в том, кто чем занимается sudo. Ваш плагин вызывает crm_mon с sudo /usr/bin/crm_mon, но вместо nagios права пользователя sudo для запуска crm_mon двоичный, у него есть только права на запуск плагинов (т.е. /usr/lib64/nagios/plugins/).

Либо добавить беспарольные привилегии sudo для /usr/bin/crm_mon двоичный файл для nagios пользователь или измените вызов плагина на использование sudo:

define command{
        command_name    check_pacemaker
        command_line    sudo /usr/lib64/nagios/plugins/check_pacemaker.sh
        }

и удалите sudo из check_pacemaker.sh.

При устранении неполадок команды, запущенной от имени обычного пользователя через nrpe, вы можете полностью имитировать решение, sudo и все остальное, сначала с другим пользователем. Прекратите тестировать его как root.

Вы можете обнаружить, что есть проблема с настроенными sudoers или могут быть проблемы с доступом к файлам для вторичных файлов, таких как файлы в / etc или / var, используемые сценарием оболочки.

Какова бы ни была проблема, вы можете увидеть фактическую ошибку, настроив своего пользователя без полномочий root (например, itai) на те же права sudoers и попробовав /usr/lib64/nagios/plugins/check_pacemaker.sh от имени этого пользователя. nrpe не возвращает ошибки, поэтому вы никогда не получите подсказки таким образом.