我在 Nagios 服务器上安装了第一个插件,但无法正确获取参数。我尝试使用 $ARG1$ 进行一些操作,但基本上只是徒劳无功。
也许有一个复杂的问题:这个插件应该在 nagios 服务器本身上运行;没有对远程机器的 npre 调用。
该插件是一个 shell 脚本,用于在后台对远程机器进行 curl 调用。带标志的典型命令行用法如下:
my_shell_script.sh -H my.server.of.interest -P 9000 -I ./tmp/settings_file -timeout 80
(是的,它有自己的‘-H’标志,与 nagios 的主机名标志无关。)
这是我现在的骨架。Nagios 似乎认为我的所有标志都是一个巨大的标志。
define command {
command_name my_command
command_line $USER1$/my_shell_script.sh $ARG1$
}
define service {
use generic-service;
host_name {{what do I put here? This is supposed to run on the nagios box itself. My shell script is installed on it.}};
service_description some description
check_command my_command!{{what goes here?}}
}
上面的内容为了便于阅读而略微精简了一点,但这就是它的要点。主机名、参数和“我要在这里放什么”中的位让我很困扰。我可以使用轻推,感谢您的建议。
[编辑] 看来我的帖子的意图通过我自己的语言被误解了。
当我说我“基本上是四处摸索”时,那是在我尝试使用 $ARG$ 宏并以多种方式重新排列事物并意识到我所尝试的根本不起作用之后。我故意放出了一个简化版本的插件代码,试图找到正确的方向。
答案1
在服务定义中,您输入要检查的服务运行所在的主机的 host_name。
check_command 定义my_command!whatever
将whatever
作为 $ARG1$ 传递给命令定义。!more
为 $ARG2$ 添加更多内容,等等。
您需要my_shell_script.sh
在命令定义中传递所需的参数。您可以访问 $HOSTNAME$ 和 $HOSTADDRESS$ 之类的内容;您在本define command
节中定义的命令将在 nagios 服务器上本地运行;对于 nrpe 之类的东西,有一个连接到 nrpe 服务器的命令定义……因此命令也在本地运行!
开始这里有关 nagios 文档,例如“基础知识”和“Nagios 中的标准宏”。
答案2
要注册并使用带参数的自定义插件,请使用以下示例
#!/bin/bash
URL=$1
if curl -s --head $URL | grep "200 OK" > /dev/null
then echo "Ok - $URL is up!"
exit 0
else echo "CRITICAL - $URL is down!"
exit 2
fi
授予所需权限和所有权与内置插件相同的权限
单独测试插件
./check_web_url <<WEBSITE_URL>>
在commands.cfg中添加定义
define command {
command_name check_web_url
command_line $USER1$/check_web_url $ARG1$
}
在 cfg 文件中添加 check_web_url
define service{
use local-service
host_name <specify-hostname>
service_description Check url
check_command check_web_url!http://website_url_will_here
check_interval 1
}