Я создал проверку 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 не возвращает ошибки, поэтому вы никогда не получите подсказки таким образом.