我为我的一项服务检查定义了以下命令:
define command{
command_name mycommand
command_line $USER1$/check_by_ssh -p $ARG1$ -l nagios -i /etc/nagios2/keys/key1 -H $HOSTADDRESS$ -v -C 'source $USER10$ ; command.py -a get --alert-name $ARG2$ -q'
}
问题是,nagios 似乎正在解析带有分号的命令,并产生无法执行的垃圾。我也尝试过添加反斜杠\;
,但无济于事。
如果我直接在 shell 上运行该命令,它会起作用。这意味着这不是 的问题check_by_ssh
,而是 nagios 配置文件解析的问题。
我该如何调试?有没有办法获取 nagios 在读取配置文件时解析的所有命令的列表?
答案1
来自评论讨论:
Nagios 显然会占用“命令”定义中分号后面的所有内容。处理此问题的最简单方法是将复杂命令包装到 Nagios 将调用的 shell 脚本中。
作为调试的一部分,可以使用 Web 界面中的 CGI 查看正在运行的 Nagios 配置,特别是 config.cgi(例如,https://nagios.example.com/cgi-bin/nagios3/config.cgi)。这将显示当前的命令集、主机等。
答案2
根据您的评论,您可能不喜欢我的回答
我有 100 多个服务,为每个服务创建一个脚本并不现实
但我认为你应该考虑使用国家可再生能源计划,Nagios 远程插件执行器。
来自他们的网站:
NRPE 允许您在其他 Linux/Unix 机器上远程执行 Nagios 插件。这允许您监视远程机器指标(磁盘使用情况、CPU 负载等)。NRPE 还可以与某些 Windows 代理插件通信,因此您也可以在远程 Windows 机器上执行脚本并检查指标
不久前,我从与您的类似设置切换到 NRPE,是的,在我想要监控的多个服务器上安装和设置新软件有点麻烦。但是好处是值得的;这是一个更可靠的设置,一旦设置好,就很容易管理每个服务器上的 Nagios 检查。