我正在使用以下服务从 nagios 监控我们的 postgres db:
define service{
use test-service ; Name of servi$
host_name DEMOCGN002
service_description Postgres State
check_command check_nrpe!check_pgsql!192.168.1.135!test!test!test
notifications_enabled 1
}
在远程机器上我配置了以下命令:
command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -H $ARG1$ -d $ARG2$ -l $ARG3$ -p $ARG4$
在系统日志中我可以看到命令已执行,但只传输了一个参数:
Oct 20 13:18:43 DEMOSRV01 nrpe[1033]: Running command: /usr/lib/nagios/plugins/check_pgsql -H 192.168.1.134 -d -l -p
Oct 20 13:18:43 DEMOSRV01 nrpe[1033]: Command completed with return code 3 and output: check_pgsql: Database name is not valid - -l#012Usage:#012check_pgsql [-H <host>] [-P <port>] [-c <critical time>] [-w <warning time>]#012 [-t <timeout>] [-d <database>] [-l <logname>] [-p <password>]
Oct 20 13:18:43 DEMOSRV01 nrpe[1033]: Return Code: 3, Output: check_pgsql: Database name is not valid - -l#012Usage:#012check_pgsql [-H <host>] [-P <port>] [-c <critical time>] [-w <warning time>]#012 [-t <timeout>] [-d <database>] [-l <logname>] [-p <password>]
为什么缺少论点 2、3 和 4?
答案1
您混淆了监控主机上定义的参数和远程主机上的参数。该$ARGx$
宏不能在 NRPE 主机上使用。
默认情况下,check_nrpe
命令定义如下:
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 120
}
在远程主机上,您必须使用“真实”值,如下所示:
command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -d test -l test -p test
可以从 Nagios 主机调用此命令:
define service{
use test-service
host_name DEMOCGN002
service_description Postgres State
check_command check_nrpe!check_pgsql
notifications_enabled 1
}
不需要传递 IP 地址,因为它获得了 的值host_name
。
答案2
我遇到了同样的麻烦,并且对所接受的答案有些不同意,所以我想我会发布解决方案以防别人遇到它。
您可以使用 nrpe 执行远程脚本,同时从监控主机传递命令行参数,否则您必须在每台远程机器上为远程脚本提供硬值,这对于大型设置来说是不可行的。
以下是它在我的工作方式,它用于远程传递 3 个参数,但您可以在 command.cfg 或等效文件中增加这个数字:
# Check NRPE command
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$
}
请注意,上一行中的 $ARG1$ 是为命令本身保留的,因此实际上是 $ARG2$、$ARG3$ 和 $ARG4$ 被发送到远程脚本,但当它们到达远程脚本时,它们将被列为 $ARG1$、$ARG2$ 和 $ARG3$(这就是 markus 所说的混合参数),因此必须在远程机器的 nrpe.cfg 中这样定义
远程机器nrpe.cfg:
command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -d $ARG1$ -l $ARG2$ -p $ARG3$
最后定义服务:
define service{
use test-service;
host_name DEMOCGN002;
service_description Postgres State;
check_command check_nrpe!check_pgsql!test!test!test;
notifications_enabled 1;
}