我编写了一个小型 bash 脚本,用于检查 docker 服务是否正常运行,当我在本地客户端上测试时,一切正常,但不知何故,它在实际用于check_nrpe
执行我的脚本的 nagios 服务器上不起作用,它总是显示脚本的其他部分。我的 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.
答案1
看起来像是权限错误。您以 root 用户身份在本地运行脚本,而您以 nagios 用户身份通过 nrpe 远程运行脚本(您没有向我们显示nrpe.cfg
调用脚本的相关配置行)。
为了解决这个问题,你可以修改 nrpe.cfg 文件使其如下所示:
command[docker_container]=sudo /usr/lib64/nagios/plugins/extra/docker_container
另外,不要忘记将 nagios 用户添加到 sudoers 文件中,以便执行此脚本而无需使用 要求输入密码visudo
。
答案2
正如@Khaled 指出的那样,这是一个权限问题,但我无法让该解决方案发挥作用。将用户添加到docker组对我来说很有效。
sudo usermod -a -G docker $(grep nrpe_user /etc/nagios/nrpe.cfg|awk -F= '{print $2}')
之后,我的用户无需 sudo 即可运行 docker 命令,并且 NRPE 已从 Nagios 服务器成功完成。