我正在尝试使用 Icinga 监控网站上的特定字符串。当我从命令行运行插件时,它似乎运行良好,但在 Icinga-Web 中,无论我输入什么字符串,它总是显示为成功。
#Doesn't Work - always returns ok
define service {
host_name mywebserver
service_description Check Website
servicegroups Websites
check_command check_http!-s "no such string" -H www.mysite.com -u /apath/ -t 7
use generic-service
notification_interval 60 ; set > 0 if you want to be renotified
}
奇怪的是,如果我按如下方式运行位于 /usr/lib/nagios/plugins/check_http 中的插件,它会给我我所期望的结果:
./check_http -H www.mysite.com -u "/apath/" -s "no such string"
HTTP CRITICAL: HTTP/1.1 200 OK - string 'no such string' not found on...
为什么会这样?
答案1
显然,您的手动测试和 Icinga 配置是不同的。
去找到 check_http 命令的定义。它几乎肯定没有处理你传递给它的 ARG,至少不是按照你想象的方式。
根据插件路径判断,我猜你使用的是 Ubuntu 或 Debian。去看看/etc/nagios-plugins/config/http.cfg
,你可能会发现类似这样的内容:
# 'check_http' command definition
define command {
command_name check_http
command_line /usr/lib/nagios/plugins/check_http -H '$HOSTADDRESS$' -I '$HOSTADDRESS$' -f follow
}
注意它不使用任何 ARG1、ARG2 等,因此它完全忽略了所有-s "no such string" -H www.mysite.com -u /apath/ -t 7
您应该编写一个新命令来接受您想要使用的参数,然后将您的 check_command 更改为类似的内容check_http_path_expect!/apath/!"no such string"
,作为示例。
阅读文档页面了解宏及其工作原理会有所帮助。