我正在尝试通过 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