在远程服务器上运行 check_nrpe

在远程服务器上运行 check_nrpe

我正在尝试通过 Icinga2 check_nrpe 插件监控虚拟服务器上的一项小型服务。我已经正确设置了两者,因为我可以执行以下操作:

  • 当我/usr/lib/nagios/plugins/check_nrpe -H remote-server-ip 从主服务器运行时,我得到NRPE v2.15
  • 当我/usr/lib/nagios/plugins/check_nrpe -H main-server-ip从远程服务器执行此操作时,我得到了相同的结果。
  • 当我跑步时/usr/lib/nagios/plugins/check_nrpe -H remote-server-ip -c check_load我得到WARNING - load average: 5.85, 5.67, 5.55|load1=5.850;15.000;30.000;0; load5=5.670;10.000;25.000;0; load15=5.550;5.000;20.000;0;

现在我尝试使用 check_nrpe 在我的远程机器上运行一个小脚本,该脚本位于/usr/local/lib/名为 的目录中check_remote_server.py。为此,我做了以下操作:

/etc/icinga2/conf.d/test.conf

object Service "Test Check" {
    import "generic-service"
    host_name = "remote-server-ip"
    check_command = "check_nrpe"
    vars.ARG1 = "check_remote_server"
}

object Host "remote-server-ip" {
    import "linux-server"
    address = "xx.xx.xx.xx"
    groups = [ "test" ]
}

以及/etc/nagios/nrpe.cfg

command[check_remote_server]=/usr/local/lib/check_remote_server.py -w 2 -c 1

但是当我重新启动 icinga2 并检查状态时,我得到了各种错误,包括语法错误、编译错误等,这些错误只有在我回滚我所做的所有更改后才会消失。我无论如何也想不出如何使用 check_nrpe 传递参数。

有人能给我一个简单的指南,告诉我如何通过配置自定义检查吗check_nrpe

编辑:使用 icinga 标签而不是 icinga2,因为没有 icinga2 标签。

编辑2:我刚刚从命令行尝试了这个 /usr/lib/nagios/plugins/check_nrpe -H remote-ip -c check_disk -a "-w 20% -c 10%,但出现了错误CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.

答案1

您使用 check_disk 进行命令行测试返回“从守护进程接收到 0 个字节”的原因可能是因为您没有:

dont_blame_nrpe=1

在 nrpe.cfg 文件中设置,因为这是允许 nrpe 客户端传递任何参数所必需的。由于允许任意参数进行 nrpe 测试存在安全隐患,因此默认情况下不允许这样做。

不过,您不需要启用该功能来测试您的自定义检查脚本,因为您已经在主机的 nrpe.cfg 中定义了它。当您通过以下方式从 icinga 服务器测试自定义检查命令时会发生什么情况

/usr/lib/nagios/plugins/check_nrpe -H remote-ip -c check_remote_server

排除 nrpe 和检查脚本的任何问题,但也要再次查看您的服务和命令定义。查看您的配置片段,我看到的第一个问题是“对象服务”行 - 它应该改为“应用服务”。此外,请确保您为 NRPE 定义了命令定义。尝试以下方法开始:

object HostGroup "test" {
  display_name = "Test Group"
  assign where host.name == "hostname.com"
  check_command = "dummy"
}

object Host "hostname.com" {
    import "generic-host"
    address = "xx.xx.xx.xx"
}

object CheckCommand "check_nrpe" {
    import "plugin-check-command"
    command = [PluginDir + "/check_nrpe" ] # Make sure this points to check_nrpe binary
    arguments = {
    "-H" = "$host$"
    "-c" = "$ARG1$"
    }
}

apply Service "Test Check" {
    import "generic-service"
    check_command = "check_nrpe"
    vars.ARG1 = "check_remote_server"
    assign where "test" in host.groups
}

有点相关,但既然你正在使用 icinga2,为什么不放弃 nrpe 并使用 icinga2本机客户端? 它非常灵活,并且可以说比使用 nrpe 更安全。

答案2

看来你的远程服务器是正确的,你的 nrpe.cfg 中有相关的行

command[check_remote_server]=/usr/local/lib/check_remote_server.py -w 2 -c 1

假设您的脚本实际输出的是 Nagios 可以识别的数据(如果 Nagios 抱怨语法错误,我对此表示怀疑,请确保分号等的数量匹配!)

然后在你的主人身上,应该很简单

 check_nrpe!check_remote_server

相关内容