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

Плагин Nagios работает не с сервера, а локально

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

Вот сценарий:

#!/bin/bash

CONTAINER=ubuntu_container

RUNNING=$(docker inspect --format="{{ .State.Running }}" $CONTAINER 2> /dev/null)

if [ "$RUNNING" == "true" ]; then
   echo "OK - $CONTAINER is running."
   exit  0
else
   echo "CRITICAL - $CONTAINER is not running."
   exit 2
fi

Вывод с сервера nagios:

root@nag_server nagios]# /usr/lib64/nagios/plugins/check_nrpe -t 30 -H docker-host.intenallab -c docker_container
CRITICAL - ubuntu_container is not running.

Вывод от клиента:

[root@ubuntu]# /usr/lib64/nagios/plugins/extra/docker_container 
OK - ubuntu_container is running.

Похоже на ошибку разрешения. Вы запускаете сценарий локально как пользователь root, в то время как запускаете сценарий удаленно через nrpe как пользователь nagios (вы не показали нам соответствующий nrpe.cfg config, которая вызывает сценарий).

Чтобы исправить это, вы можете изменить файл nrpe.cfg, чтобы он выглядел так:

command[docker_container]=sudo /usr/lib64/nagios/plugins/extra/docker_container

Кроме того, не забудьте добавить пользователя nagios в файл sudoers, чтобы выполнить этот сценарий без запроса пароля, используя visudo.

Как отметил @Khaled, это проблема с разрешениями, но мне не удалось заставить это решение работать. Добавление пользователя в группу докеров помогло мне.

sudo usermod -a -G docker $(grep nrpe_user /etc/nagios/nrpe.cfg|awk -F= '{print $2}')

После этого мой пользователь может запускать команды докеров без необходимости sudo, и NRPE успешно завершается с сервера Nagios.