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

Nagios: выполнение плагина с nrpe дает другой результат, чем локальный

Я пытаюсь добавить проверку NRPE для мониторинга агента Puppet, но у меня возникают трудности с тем, чтобы плагин возвращал правильный результат при локальном запуске.

Я использую этот плагин:

при выполнении сценария локально на клиенте nagios результат правильный, но выполнение с nrpe приводит к критическому результату. Полагаю, я что-то упустил в своей конфигурации. Другие плагины nrpe работают успешно.

Я перезапустил nrpe.d (и проверил, пока он был выключен, что ни один pid nrpe не работал). Разрешения, владелец и группа для файла check_puppet такие же, как и другие мои проверки

[root@puppet-master]# /usr/lib64/nagios/plugins/check_nrpe -H server.addr -c check_puppet
CRITICAL: Puppet daemon not running or something wrong with process

[root@git nrpe.d]# /usr/lib64/nagios/plugins/check_puppet
OK: Puppet agent "3.4.3" running catalogversion 1398787991, and executed at Tue 29 Apr 2014 04:13:25 PM UTC for last time

nagios_commands.cfg:

define command {
    command_line                   $USER1$/check_nrpe -H $HOSTADDRESS$ -t 15 -c check_puppet
    command_name                   check_nrpe_puppet
}

nagios_service.cfg:

define service {
    ## --PUPPET_NAME-- (called '_naginator_name' in the manifest)                    check_puppet
    check_command                  check_nrpe_puppet
    host_name                      server.addr
    service_description            check_puppet
    use                            generic-service
}

/etc/nrpe.d/nrpe-check_puppet

# Configuration for check_puppet (from the generic template)
command[check_puppet]=/usr/lib64/nagios/plugins/check_puppet

Для справки вот мой рабочий конфиг

define command {
    command_line                   $USER1$/check_nrpe -H $HOSTADDRESS$ -t 15 -c check_ram
    command_name                   check_nrpe_ram

}

define service {
    ## --PUPPET_NAME-- (called '_naginator_name' in the manifest)                check_ram_server.addr
    check_command                  check_nrpe_ram
    host_name                      server.addr
    service_description            ram
    use                            generic-service
}

/etc/nrpe.d/nrpe-check_ram

# Configuration for check_ram (from the generic template)
command[check_ram]=/usr/lib64/nagios/plugins/check_ram -w 10% -c 5%

Обновить:

Я добавил пользователя Nagios в sudoers, как указано в readme, но не тестировал запуск проверки как пользователь Nagios. Это не удалось, потому что путь, разрешенный в списке sudoers, был неправильным (мой плагин находится в Lib64), а также NRPE работает как пользователи nrpe в моих системах.

Я исправил sudoers, чтобы предоставить nopasswed sudo для правильной папки пользователю nrpe и добавил оболочку nrpe, чтобы я мог тестировать как этот пользователь (он был установлен на nologin)

bash-4.1$ whoami
nrpe
bash-4.1$ /usr/lib64/nagios/plugins/check_puppet 
UNKNOWN: last_run_summary.yaml not found, not readable or incomplete
bash-4.1$ exit
exit
[root@ip-10-185-165-196 plugins]# ps auxww | grep nrpe 
nrpe     16353  0.0  0.0  41320  1364 ?        Ss   23:33   0:00 /usr/sbin/nrpe -c   /etc/nagios/nrpe.cfg -d
root     16814  0.0  0.0 103236   856 pts/0    S+   23:53   0:00 grep nrpe
[root@ip-10-185-165-196 plugins]# 

На сервере nagios:

[root@puppet-master plugins]# ./check_nrpe -H <myserver> -t 15 -c check_puppet
CRITICAL: Puppet daemon not running or something wrong with process

Я использую минимальную установку CentOS 6.5

Я отключил requiretty с помощью:

Defaults:nrpe    !requiretty

ОБНОВЛЕНИЕ 3:

Похоже, виноват SELinux. setenforce 0 решил проблемы. $ setenforce 0

Как указывает yoonix, сам плагин довольно ясен, в строках 36-38: это просто оболочка вокруг основного плагина, и этот основной плагин должен запускаться от имени пользователя root. Вот почему он работал нормально, когда вы запускали его как root. Обертка повысит привилегию через sudo; он настроен на выполнение sudo сам по себе, но вам нужно будет предоставить соответствующие sudo привилегии.

Предполагая, что ваш nrpe работает как пользователь nagios, плагин сообщает, что вам понадобится следующая строка в вашем sudoers файл:

nagios ALL=NOPASSWD:/usr/bin/puppet,/usr/lib/nagios/plugins/check_puppet_agent,/bin/kill

(Я не уверен, зачем это нужно /bin/kill, но в нем говорится, что это так, поэтому вам, вероятно, лучше предоставить его, иначе вы рискуете, что плагин выйдет из строя интересными и недостаточно документированными способами.)

Вы не говорите нам, какая у вас ОС (и, если Linux, дистрибутив); если бы это была CentOS и вы использовали RPMforge nrpe, он будет работать как пользователь nagios. Вам нужно будет узнать, какого пользователя вы nrpe работает как, и замените этого пользователя ведущим nagios в sudoers строка выше.