我具有以下服务定义:
define service{
use my-service ; Name of service template to use
host_name dra
service_description https://www.example.com
check_command check_http!-I my.ip.address --ssl -H www.example.com
notifications_enabled 1
retry_check_interval 2
normal_check_interval 5
contact_groups myadmins
}
服务检查不断失败
Name or service not known
HTTP CRITICAL - Unable to open TCP socket
但是,如果我从命令行运行http_check,则会得到200 OK的结果:
/usr/lib/nagios/plugins/check_http -I my.ip.address --ssl -H www.example.com -v
.....
HTTP OK: HTTP/1.1 200 OK - 9176 bytes in 0.074 second response time |time=0.073543s;;;0.000000 size=9176B;;;0
还要注意,所讨论的URL在浏览器中工作正常,证书有效,等等。我还对许多其他站点使用完全相同的服务定义,它们都工作正常。我唯一能想到的是,此远程主机在DigitalOcean上运行,并为其分配了“浮动IP”。我尝试用分配给主机的浮动IP或“标准” IP替换上面的my.ip.address
(以及nagios配置文件的主机定义),但这没有什么区别。
当由nagios运行时,同一命令怎么可能失败,而在手动运行时,成功吗?
答案 0 :(得分:0)
我的问题的答案是:不要使用check_http
,请使用
check_https_hostname
和host_name
节是实际的主机名host_name
和service
定义中的host
节。所以:
define service{
use my-service ; Name of service template to use
host_name www.example.com
service_description https://www.example.com
check_command check_https_hostname
notifications_enabled 1
retry_check_interval 2
normal_check_interval 5
contact_groups myadmins
}
这是为什么:通过查看安装中check_http
文件中的check_https_hostname
和/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$' '$ARG1$'
}
# 'check_https_hostname' command definition
define command{
command_name check_https_hostname
command_line /usr/lib/nagios/plugins/check_http --ssl -H '$HOSTNAME$' -I '$HOSTADDRESS$' '$ARG1$'
}
您会注意到-H
中的-I
和check_http
自变量获得相同的值$HOSTADDRESS$
,而在check_https_hostname
中自变量获得$HOSTNAME$
和$HOSTADDRESS$
。
我将原始命令构建为check_http!-I my.ip.address --ssl -H www.example.com
的事实并不重要。最后,/usr/lib/nagios/plugins/check_http
命令为-I
得到了两个值,为-H
得到了两个值,第二对被忽略。
这确实使Cloudflare失去了“感谢”,因为Cloudflare动态分配给我的www.example.com的IP地址与我在主机定义中指定的实际主机IP地址不同。
最后,我想提一提帮助我弄清这件事的原因
debug_level=-1
debug_verbosity=1
在我的/etc/nagios3/nagios.cfg
文件中,然后浏览/var/log/nagios3/nagios.debug
。
还要在check_http
中检出/etc/nagios-plugins/config/http.cfg
命令的所有不同变体。有一些非常有用的。