Nagios:NRPE:无法读取输出,找不到原因,可以吗?

Nagios:NRPE:无法读取输出,找不到原因,可以吗?

我有一台 Nagios 服务器和一台受监控的服务器。在受监控的服务器上:

[root@Monitored ~]# netstat -an |grep :5666
tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      
[root@Monitored ~]# locate check_kvm
/usr/lib64/nagios/plugins/check_kvm
[root@Monitored ~]# /usr/lib64/nagios/plugins/check_kvm -H localhost
hosts:3 OK:3 WARN:0 CRIT:0 - ab2c7:running alpweb5:running istaweb5:running
[root@Monitored ~]# /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_kvm
NRPE: Unable to read output
[root@Monitored ~]# /usr/lib64/nagios/plugins/check_nrpe -H localhost
NRPE v2.14
[root@Monitored ~]# ps -ef |grep nrpe
nagios   21178     1  0 16:11 ?        00:00:00 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d
[root@Monitored ~]#

在 Nagios 服务器上:

[root@Nagios ~]# /usr/lib64/nagios/plugins/check_nrpe -H 1.1.1.159 -c check_kvm
NRPE: Unable to read output
[root@Nagios ~]# /usr/lib64/nagios/plugins/check_nrpe -H 1.1.1.159
NRPE v2.14
[root@Nagios ~]#

当我使用相同的命令检查网络中的另一台服务器时,它有效:

[root@Nagios ~]# /usr/lib64/nagios/plugins/check_nrpe -H 1.1.1.80 -c check_kvm
hosts:4 OK:4 WARN:0 CRIT:0 - karmisoft:running ab2c4:running kidumim1:running travel2gether1:running
[root@Nagios ~]#

使用 Nagios 帐户在本地运行检查:

[root@Monitored ~]# su - nagios
-bash-4.1$ /usr/lib64/nagios/plugins/check_kvm
hosts:3 OK:3 WARN:0 CRIT:0 - ab2c7:running alpweb5:running istaweb5:running
-bash-4.1$

使用 Nagios 帐户从 Nagios 服务器远程运行检查:

-bash-4.1$ /usr/lib64/nagios/plugins/check_nrpe -H 1.1.1.159 -c check_kvm
NRPE: Unable to read output
-bash-4.1$ /usr/lib64/nagios/plugins/check_nrpe -H 1.1.1.159
NRPE v2.14
-bash-4.1$

使用 Nagios 帐户针对网络中的不同服务器运行相同的 check_kvm:

-bash-4.1$ /usr/lib64/nagios/plugins/check_nrpe -H 1.1.1.80 -c check_kvm
hosts:4 OK:4 WARN:0 CRIT:0 - karmisoft:running ab2c4:running kidumim1:running travel2gether1:running
-bash-4.1$ 

权限:

-rwxr-xr-x. 1 root root 4684 2013-10-14 17:14 nrpe.cfg (aka /etc/nagios/nrpe.cfg)
drwxrwxr-x. 3 nagios nagios 4096 2013-10-15 03:38 plugins (aka /usr/lib64/nagios/plugins)

/etc/sudoers:

[root@Monitored ~]# grep -i requiretty /etc/sudoers
#Defaults    requiretty

iptables / selinux:

[root@Monitored xinetd.d]# service iptables status
iptables: Firewall is not running.
[root@Monitored xinetd.d]# service ip6tables status
ip6tables: Firewall is not running.
[root@Monitored xinetd.d]# grep disable /etc/selinux/config 
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
[root@Monitored xinetd.d]#

命令/etc/nagios/nrpe.cfg为:

[root@Monitored ~]# grep kvm /etc/nagios/nrpe.cfg 
command[check_kvm]=sudo /usr/lib64/nagios/plugins/check_kvm

并且nagios用户被添加到/etc/sudoers

nagios  ALL=(ALL) NOPASSWD:/usr/lib64/nagios/plugins/check_kvm
nagios  ALL=(ALL) NOPASSWD:/usr/lib64/nagios/plugins/check_nrpe

check_kvm是一个 shell 脚本,如下所示:

#!/bin/sh

LIST=$(virsh list --all | sed '1,2d' | sed '/^$/d'| awk '{print $2":"$3}')

if [ ! "$LIST" ]; then
  EXITVAL=3 #Status 3 = UNKNOWN (orange) 
  echo "Unknown guests"
  exit $EXITVAL
fi

OK=0
WARN=0
CRIT=0
NUM=0

for host in $(echo $LIST)
do
  name=$(echo $host | awk -F: '{print $1}')
  state=$(echo $host | awk -F: '{print $2}')
  NUM=$(expr $NUM + 1)

  case "$state" in
    running|blocked) OK=$(expr $OK + 1) ;;
    paused) WARN=$(expr $WARN + 1) ;;
    shutdown|shut*|crashed) CRIT=$(expr $CRIT + 1) ;;
    *) CRIT=$(expr $CRIT + 1) ;;
  esac
done

if [ "$NUM" -eq "$OK" ]; then
  EXITVAL=0 #Status 0 = OK (green)
fi

if [ "$WARN" -gt 0 ]; then
  EXITVAL=1 #Status 1 = WARNING (yellow)
fi

if [ "$CRIT" -gt 0 ]; then
  EXITVAL=2 #Status 2 = CRITICAL (red)
fi

echo hosts:$NUM OK:$OK WARN:$WARN CRIT:$CRIT - $LIST

exit $EXITVAL

编辑(2013 年 10 月 22 日):完成所有这些后,我现在能够从脚本中得到一些响应:

[root@Monitored ~]# /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_kvm
Unknown guests
[root@Monitored ~]# /usr/lib64/nagios/plugins/check_nrpe -H localhost
NRPE v2.14
[root@Monitored ~]# /usr/lib64/nagios/plugins/check_kvm
hosts:3 OK:3 WARN:0 CRIT:0 - ab2c7:running alpweb5:running istaweb5:running
[root@Monitored ~]# su - nagios
-bash-4.1$ /usr/lib64/nagios/plugins/check_kvm
hosts:3 OK:3 WARN:0 CRIT:0 - ab2c7:running alpweb5:running istaweb5:running
-bash-4.1$ /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_kvm
Unknown guests
-bash-4.1$ /usr/lib64/nagios/plugins/check_nrpe -H localhost
NRPE v2.14

看起来问题与命令或与服务器上的安装check_nrpe相关的某些东西有关。nrpe

编辑于 2013 年 12 月 2 日:对有问题的服务器进行其他检查: 在此处输入图片描述

答案1

Itai 写得真详细!您是否尝试过降低配置的复杂性以查看是否有效?

首先,我将首先将行更改nrpe.cfg

command[check_kvm]=/usr/lib64/nagios/plugins/check_kvm

并暂时将 /usr/lib64/nagios/plugins/check_kvm 脚本更改为非常简单的内容,例如:

#!/bin/sh
echo Hi
exit 0

如果可行,那么您可以开始增加复杂性。也许不是让用户nagios拥有脚本的 sudo 访问权限,而是让用户真正需要访问命令virsh,这样您就可以省去命令行sudo中的这一部分nrpe.cfg

答案2

我在 Gentoo 服务器上看到了一个与你类似的问题http://forums.gentoo.org/viewtopic-t-806014-start-0.html

有一个很好的方法来调试这个问题。

该帖子中的用户在使用 check_disk 时遇到了问题,并收到了与您完全相同的错误消息。

他被告知执行以下命令:

ssh remote_ip /usr/lib/nagios/plugins/check_disk -w 10 -c 5 -p "/"  2>&1

2>&1输出 stderr 并可能揭示确切的错误。

因此,在您的情况下,将 remote_ip 替换为无法执行 check_nrpe 的服务器的 ip 地址。并将 check_disk 命令替换为 check_kvm 应该执行的完整命令。如果您在没有任何参数的情况下运行它,那么您可以直接执行

  ssh <remote_ip> /usr/lib64/nagios/plugins/check_kvm 2>&1

希望能够揭示有关该问题的信息。

祝你好运!

答案3

我遇到了同样的问题,并通过终止 nagios 进程(在被监控的机器上)解决了它:

ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start

此后一切都很顺利。

答案4

尝试在 /etc/sudoers 文件中注释以下行:

Defaults    requiretty

修改之后应该是这样的:

#Defaults    requiretty

相关内容