Nagios - NRPE:未定义命令“...”

Nagios - NRPE: Command '...' not defined

/usr/local/nagios/etc/nrpe.cfg 中,我添加了一个新命令 check_this_process 到已经预定义的命令:

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/$
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s$
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
command[check_this_process]=/usr/local/nagios/libexec/check_procs -w 15 -c 20 -C name

这个有效:

define service{
        use                     generic-service
        host_name               my_host
        service_description     CPU Load
        check_command           check_nrpe!check_load
}

这不是:

define service{
        use                             local-service
        host_name                       my_host
        service_description             cron
        check_command                   check_nrpe!check_this_process
}

和returns:NRPE: Command 'check_this_process' not defined

提供的文档中使用的术语有点令人困惑,但我会这样说:

https://assets.nagios.com/downloads/nagioscore/docs/nrpe/NRPE.pdf 第 10 页所述,您需要在 Nagios 服务器 上修改 /usr/local/nagios/etc/commands.cfg 并添加以下内容以定义 check_nrpe命令:

define command{
    command_name check_nrpe
    command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

在您的 Nagios 服务器上,像您已经完成的那样定义您的服务定义:

define service{
        use                             local-service
        host_name                       my_host
        service_description             cron
        check_command                   check_nrpe!check_this_process
}

在你要监控的远程主机上,下面会根据你是否安装了NRPE而有所不同:

如果您使用 tarball / xinetd 方法,您的 NRPE 配置文件可能位于要监视的远程主机上的 /usr/local/nagios/etc/nrpe.cfg(为了避免一直输入,我就叫它 "my_host")。 所以,在my_host上修改/usr/local/nagios/etc/nrpe.cfg.

添加

command[check_this_process]=/usr/local/nagios/libexec/check_procs -w 15 -c 20 -C name

所以它看起来像:

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/$
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s$
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
command[check_this_process]=/usr/local/nagios/libexec/check_procs -w 15 -c 20 -C name

(注意:上面是假设你有一个名为name的进程。如果没有,请将name替换为你的真实进程名称:即 crond)

重新启动 xinetd:

service xinetd restart

注意: 可能不需要重新启动 xinted,但我不使用它,所以我对此有点模糊。)

但是,如果您使用像 yum 这样的包管理器在 my_host 上安装了 NRPE,您的 NRPE 配置文件可能位于 /etc/nagios/nrpe.cfg。 所以,在my_host上修改/etc/nagios/nrpe.cfg.

添加

command[check_this_process]=/usr/local/nagios/libexec/check_procs -w 15 -c 20 -C name

所以它看起来像:

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/$
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s$
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
command[check_this_process]=/usr/local/nagios/libexec/check_procs -w 15 -c 20 -C name

重新启动 nrpe 服务:

service nrpe restart

回到您的 Nagios 服务器,运行 验证您的 Nagios 配置设置:

nagios -v /usr/local/nagios/etc/nagios.cfg

检查输出是否有错误。 如果没有错误,重启Nagios:

service nagios restart

在您的 Nagios 服务器上,由于在您的 Nagios 服务器上安装了“check_nrpe 插件”,您应该安装了一个 check_nrpe 实用程序。 参见第 9 页和第 10 页: https://assets.nagios.com/downloads/nagioscore/docs/nrpe/NRPE.pdf

check_nrpe 实用程序很可能位于:/usr/local/nagios/libexec/check_nrpe 使用 my_host 的主机信息从 Nagios 服务器 手动测试您的 NRPE 连接 。 执行以下:

/usr/local/nagios/libexec/check_nrpe -H <IP Address of my_host> -c check_this_process

如果一切设置正确,您应该在命令行上得到一些输出。

我的 'NRPE: Command ... not found.' 故障排除指南按从最常见到最不常见的顺序排列 - 在我的环境中。

  1. 添加新命令后是否重新启动了 NRPE 守护程序?如果是新命令,则必须重新启动 NRPE。
  2. Typos/spelling 个错误。 Nagios 端配置的命令名称是否与 NRPE 配置中的名称相匹配?
  3. 权限问题。 NRPE 运行 的用户是否具有对 运行 的实际命令的可读和可执行访问权限?作为 NRPE 用户,您是否测试了 运行 命令?在同一个系统上?提示:在 Linux 上更改为 NRPE 用户时使用破折号 (-) (su - ...),这样您也可以导入所述用户环境。
  4. 路径问题。实际命令的完整路径是否已放入 NRPE 配置文件?这样做通常会消除 PATH 的问题,所以不要以任何其他方式进行。
  5. 错误的命令。实际命令真的执行了吗?或者它只是抛出错误并退出?您是否在远程系统上安装了 运行 命令的正确版本的 (INSERT SOMETHING HERE)?您应该能够从命令行 运行 nrpe.cfg 中定义的任何命令,并且在添加到 nrpe.cfg.
  6. 之前应检查所有新命令
  7. 如果以上都失败:在 NRPE 中启用调试并检查日志文件(在远程主机上)。这是一个有点冗长的过程 - 在文档中描述 - 阅读它。一旦获得看起来有用的输出,请务必立即禁用 DEBUGGING。

此清单假定您已经对各种 Nagios 和 NRPE 配置完成了必要的工作,以使其首先正常工作。希望其他人在发布另一个关于为什么会看到此错误的问题之前阅读此内容。