Nagios 命令未传输所有参数

Nagios 命令未传输所有参数

我正在使用以下服务从 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;
    }

相关内容