Я написал небольшой сценарий 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.