我正在运行 Shinken,并且有一个包含多个命令的包,这些命令通过 NRPE 在受监控的主机上运行 bash 脚本。我对运行带有 4 个参数的 bash 脚本的主机进行了检查。当它运行时,我传入的 4 个参数中只有 1 个会将 command.cfg 发送到主机以供脚本使用。
我已经搜索了很多次这个问题,但还没有找到解决办法。据我所知,人们报告的大多数将参数传递给 NRPE 的问题都源于没有正确设置“dont_blame_nrpe”或没有使用参数支持编译 nrpe。我的情况并非如此。dont_blame_nrpe 设置为 1,并且模块使用参数支持编译。此外,我在同一台主机(在同一个包内设置)上进行了检查,该检查只接受一个参数,并且运行正常。
这是包中的commands.cfg:
define command {
command_name check_nrpe
command_line $PLUGINSDIR$/check_nrpe -u -H $HOSTADDRESS$ -c $ARG1$ -a '$ARG2$ $ARG3$ $ARG4$ $ARG5$'
}
我还尝试了上述方法,即用双引号将整个参数集括起来,并用双引号将每个单独的参数括起来。无论如何,我都会得到相同的结果。
服务定义:
define service{
service_description check-worker-count
use generic-service
register 0
host_name nrpe-pack
check_command check_nrpe!check-worker-count!worker-name!12!90!80
}
以及主机上的/etc/nrpe.d/check-worker-count.cfg:
command[check-worker-count]=/usr/lib64/nagios/plugins/check_worker_count.sh -n $ARG1$ -p $ARG2$ -w $ARG3$ -c $ARG4$
我在主机上有一个脚本,一开始就输出 $*,下面是它得到的结果:
-n 工作者名称 -p -w -c
与在命令行传递参数的情况下在本地运行脚本进行比较:
-n 工人名称 -p 12 -w 90 -c 80
答案1
不要费心在 Nagios conf 中将所有 -a ARG 分成单独的 ARG。引号会让你抓狂。为简单起见,请像command_line
这样:
$PLUGINSDIR$/check_nrpe -u -t 30 -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
然后像这样使用它:
check_command check_nrpe!check-worker-count!worker-name 12 90 80
至少,这是您在 Nagios/Icinga 中执行的操作。对于 Shinken 应该也一样。