在远程服务器上运行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; 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_nrpeconfiguration自定义检查?

编辑:使用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. /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.

机会是你的命令行testingcheck_disk返回“从守护进程接收0字节”的原因是因为你没有:

 dont_blame_nrpe=1 

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

你不需要启用它来testing你的自定义检查脚本,因为你已经在主机的nrpe.cfg中定义了它。 当您通过icinga服务器testing自定义检查命令时会发生什么

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

排除与nrpe和你的检查脚本有关的任何问题,但也要看看你的服务和命令定义。 看看你的configuration片段,我看到的第一个问题是“对象服务”这一行 – 这应该是“应用服务”。 另外,确保你有一个为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更安全。

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

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

如果你的脚本实际上输出了Nagios识别的数据(我对Nagios是否抱怨语法错误持怀疑态度,请确保分号的数量与之匹配!)

那么在你的主人身上,应该如此简单

  check_nrpe!check_remote_server