Nagios/nrpe 给出“返回代码 255 超出范围”

Nagios/nrpe 给出“返回代码 255 超出范围”

我为 nagios 设置了以下服务:

define service {
  hostgroup_name             LNX
  service_description        /tmp Disk Usage
  check_command              check_nrpe!check_disk!-a '-w 20% -c 10% -p /tmp'
  check_interval             1
  max_check_attempts         3
  retry_interval             1
  check_period               24x7
  notification_interval      2
  notification_period        24x7
  notification_options       c,r,w
  notifications_enabled      0
  contact_groups             devops
}

这与以下命令相关:

define command {
 command_name     check_nrpe
 command_line     $USER1$/check_nrpe -H $HOSTADDRESS$ -u -t 60 -c $ARG1$ $ARG2$
}

因此最终执行的内容(以及在命令行上运行时的输出)是:

$: /usr/local/nagios/libexec/check_nrpe -H <my host> -u -t 60 -c check_disk -a '-w 20% -c 10% -p /tmp'
DISK OK - free space: /tmp 4785 MB (97% inode=99%);| /tmp=124MB;3928;4419;0;4910

接下来echo $?产生 0,表示 OK/成功。

然而,nagios 将此报告为“错误代码 255 超出范围”,我不确定原因。

在服务器上运行 check_disk 命令可以正常工作:

$: ./check_disk -w 20% -c 10% -p /tmp
DISK OK - free space: /tmp 4785 MB (97% inode=99%);| /tmp=124MB;3928;4419;0;4910
$: echo $?
0

如上所示,通过check_nrpenagios 服务器上的可执行文件执行时,它可以正常工作。这意味着:

  1. check_disk远程系统上存在 命令( ):command[check_disk]=/usr/local/nagios/libexec/check_disk $ARG1$
  2. Nagios 服务器能够与远程 nrpe 通信(例如,它可以在网络上访问它,并且它的 IP 存在于only_from中的指令中/etc/xinetd.d/nrpe

此外,此检查在其他机器上运行良好,但并非所有机器

为什么 Nagios 认为它​​得到的是 255,而我看到的一切都意味着它应该得到的是 0,从而将服务标记为正常?

编辑:Nagios 版本是运行在 CentOS 7 上的 Nagios core 4,被检查的主机是 centos 5-7,问题出现在不同版本的多台机器上

答案1

当您有如下 check_command 时:

check_command check_nrpe!check_disk

命令名称 tied 实际上是检查磁盘代替检查_nrpe在客户端。

问题原因

Nagios 服务器中的服务设置要求被监控的客户端使用一个参数执行 check_disk 命令。

-w 20% -c 10% -p /tmp

您当前的设置检查磁盘在 Nagios 客户端上使用命令nrpe配置文件如图所示:

command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$

因此,您通过 NRPE 传递给监控客户端的命令实际上是:

/usr/lib64/nagios/plugins/check_disk -w -w 20% -c 10% -p /tmp -c $ARG2$ -p $ARG3$

因此,由于命令无法成功执行,因此测试失败。

解决方案

如果你想向 Nagios 客户端传递 3 个不同的参数,请尝试修改你的检查命令如下:

check_command check_nrpe!check_disk -a '-w 20% -c 10% -p /tmp'

确保你已经在Nagios客户端配置了相应的命令:

command[check_disk]=/usr/lib64/nagios/plugins/check_disk $ARG1$

另外一个选择将更改服务器配置如下:

check_command check_nrpe!check_disk

相应的客户端配置如下:

command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /tmp

答案2

您应该检查 nrpe 客户端是否接受来自 nagios 服务器的连接。

cat /etc/xinetd.d/nrpe
service nrpe
{
    flags           = REUSE
    socket_type     = stream
    port            = 5666
    wait            = no
    user            = nagios
    group           = nagios
    server          = /usr/local/nagios/bin/nrpe
    server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd
    log_on_failure  += USERID
    disable         = no
    only_from       = xxx.xxx.xxx.xxx
}

确认 only_from 行包含你的 nagios IP

其次,您需要检查 check_nrpe 脚本是否具有正确的权限。它应该归 nagios 所有:nagios

-rwxrwxr-x. 1 nagios nagios 81542 Jul 11 13:08 /usr/local/nagios/libexec/check_nrpe

相关内容