nagios 检查在 nagios 主机上失败,但在本地可以运行

nagios 检查在 nagios 主机上失败,但在本地可以运行

我编写了一个小型 bash 脚本,与 nagios 一起使用来检查 nrpe 是否正在运行。

以 root 身份运行时检查在本地有效,但从监控主机运行时检查会失败。

从我尝试监控的主机,我的 nrpe.conf 中有此行​​:

 command[check_nrpe]=/usr/lib64/nagios/plugins/check_nrpe.sh

并确保检查脚本属于 nagios 用户:

[root@ops:~] #ls -l /usr/lib64/nagios/plugins/check_nrpe.sh
-rwxr-xr-x. 1 **nagios nagios** 203 Jun  9 20:29     **/usr/lib64/nagios/plugins/check_nrpe.sh**

如果我以 root 用户身份运行该脚本,则会得到正确的结果:

 [root@ops:~] #/usr/lib64/nagios/plugins/check_nrpe.sh OK: NRPE is running with pid: 24538
24538

但是当我从 nagios 主机运行它时,检查产生了相反的结果:

[root@monitor1:~] #/usr/local/nagios/libexec/check_nrpe -H ops.mydomain.com -c     check_nrpe
**CRITICAL: NRPE is **NOT** Running**

如果我返回到我尝试监控的主机并成为 nagios 用户,我会得到与在 nagios 主机上相同的错误结果。

[root@ops:~] #su - nagios
Last login: Tue Jun  9 20:43:42 UTC 2015 on pts/3

-bash-4.2$ /usr/lib64/nagios/plugins/check_nrpe.sh
**CRITICAL: NRPE is **NOT** Running**

如果我授予 nagios 用户 sudo 对该脚本的访问权限,我就可以以本地主机上的 nagios 用户身份获得正确的结果。

在 /etc/sudoers 中,我授予 nagios 用户访问命令的权限,并通过输入以下内容禁用 tty:

    nagios ALL=(ALL)    NOPASSWD: /usr/lib64/nagios/plugins/check_nrpe.sh    !requiretty

现在,如果我成为本地主机上的 nagios 用户并使用 sudo,检查就会产生正确的结果。

[root@ops:~] #su - nagios
Last login: Tue Jun  9 23:37:09 UTC 2015 on pts/0

-bash-4.2$ sudo /usr/lib64/nagios/plugins/check_nrpe.sh
**OK: NRPE is running with pid: 24538**
24538

然后我在本地主机上编辑 nrpe conf 文件以在命令前使用 sudo。在 nrpe.conf 中我输入:

[root@ops:~] #grep check_nrpe /etc/nagios/nrpe.cfg
command[check_nrpe]=/bin/sudo /usr/lib64/nagios/plugins/check_nrpe.sh

并重新启动nrpe服务:

[root@ops:~] #systemctl restart nrpe
[root@ops:~] #lsof -i :5666
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nrpe    6137 nrpe    4u  IPv4 493404      0t0  TCP *:5666 (LISTEN)
nrpe    6137 nrpe    5u  IPv6 493405      0t0  TCP *:5666 (LISTEN)

但是当我返回 nagios 主机并再次运行检查时,出现输出错误:

[root@monitor1:~] #/usr/local/nagios/libexec/check_nrpe -H ops.jokefire.com -c     check_nrpe
 **NRPE: Unable to read output**

这是我检查nrpe脚本的内容:

[root@ops:~] #cat /usr/lib64/nagios/plugins/check_nrpe.sh
#!/bin/bash

pid=$(lsof -i :5666 | awk '{print $2}' | grep -i -v pid)

if [[ $pid ]]
then
  echo "OK: NRPE is running with pid: $pid"
  exit 0
else
  echo "CRITICAL: NRPE is **NOT** Running"
  exit 2
fi

帮助!!我如何让这个检查从 nagios 主机返回正确的结果?

谢谢

相关内容