我正在尝试配置 Nagios 来监控我们完全基于 Windows 的网络。我对它完全陌生,所以请原谅我的幼稚。事实是:我正在为一项任务而绞尽脑汁。
我想要实现的是让 Nagios 告诉我远程服务/进程是否正在运行。我在客户端计算机上安装了 NSClilent++ 并正在运行。事实上,如果我在 Nagios 服务器中从命令行执行以下代码,它就会起作用:
check_nrpe -H [ip_of_NSClient++] -c check_service -a 'service=[service_name]' "critical=state = 'stopped'"
我的问题是:如何在[中定义服务主持人].cfg 文件来调用上述命令吗?
现在我已经在我的commands.cfg文件中定义了它:
define command {
$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG1$
}
它可以调用像 [check_cpu] 或 [check_disk] 这样的简单服务,但仅此而已。
到目前为止我所做的所有尝试总是导致(我认为)不稳定的错误消息,例如:
- (标准输出上无输出)stderr:无法解析主机名 $:名称或服务未知。或
- CHECK_NRPE:从服务器接收到无效的数据包类型。
答案1
NRPE 客户端内置了针对 Windows 服务的特定检查
这是:
check_command check_windows_service!"<display name of the service>"
您必须输入展示服务在 Windows 服务管理器中显示的名称。
答案2
我通常使用 Old Skool
define service{
use generic-service ; Name of service
host_name YourServer
service_description YourService
check_command check_nt!SERVICESTATE!-d SHOWALL -l YourService
}
话虽如此,我还是拿出了我的 check_nrpe 定义并发现:
# this command runs a program $ARG1$ with arguments $ARG2$
define command {
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}
# this command runs a program $ARG1$ with no arguments
define command {
command_name check_nrpe_1arg
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
说实话,我不记得我是否创建了第二个(但我可能创建了)。但是,你的 ARG1 指定了两次,而你有两个参数:
define command {
$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG1$
}
应该是
define command {
$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}