我对 nagios 工具有一个小疑问:
是否有可能通过代理在 nagios 中监控 https 站点?这意味着我想监控我的代理是否可以访问互联网上的某些 https 资源?我认为使用这个命令没有问题:
/usr/lib/nagios/plugins/check_http -j CONNECT -u "https://banking.postbank.de" -S
但是我们的 nagios 服务器没有直接的互联网访问,并且这个命令不起作用..(openssl 已安装)我认为“-S”选项不适用于代理..:
/usr/lib/nagios/plugins/check_http -I 10.46.4.200 -p 8080 -j CONNECT -u "https://banking.postbank.de" -S
所以问题是:该怎么办? der 是某种 check_https 吗?或者类似的东西?有人做过这样的检查吗?
非常感谢你的帮助,Fake4d
答案1
答案2
check_http 当然适用于 https 网站,并且 '-j CONNECT' 是必不可少的,因为您已经拥有了,但您还需要一个 -H ..并且您的代理服务器设置为通过 https
例子:
check_http -I PROXYHOST -p PROXYPORT -H FQDN -u RELATIVE-URI -S -j CONNECT -s STRING-TO-MATCH
- 我使用相对 uri 而不是完整 url 获得了更好的结果。例如:'/vendors' 而不是 'http://example.com/vendors‘
- 当然,只有当您尝试匹配返回内容中的特定字符串时,才会使用 -s
- 最后,在某些环境中,最好的选择仍然是将 wget 或 curl 包装在脚本中
答案3
pQd 的答案略有改进:
#!/bin/bash
URL=$1
RESPONSE_CODE=${2:-200}
TIMEOUT=${3:-10}
case $RESPONSE_CODE in
401)
EXPECTED_RETURN_CODE=6
;;
200)
EXPECTED_RETURN_CODE=0
;;
*)
EXPECTED_RETURN_CODE=0
;;
esac
start=`date +%s`
wget -t 1 --timeout ${TIMEOUT} -O /dev/null -o /dev/null -e http_proxy=PUTYOURPROXYHERE:8080 ${URL}
WGET_RETURN_CODE=$?
end=`date +%s`
PERFDATA="time=$(expr ${end} - ${start})s"
if [ ${WGET_RETURN_CODE} -eq ${EXPECTED_RETURN_CODE} ] ; then
echo "HTTP OK: HTTP/1.1 ${RESPONSE_CODE} OK for ${URL}|${PERFDATA}"
exit 0
else
echo "HTTP CRITICAL: Did not receive HTTP/1.1 ${RESPONSE_CODE} for ${URL}|${PERFDATA}"
exit 2
fi
更改代理服务器并这样调用:
$ bash check_http_proxy.sh https://stackoverflow.com/ 200 3
HTTP OK: HTTP/1.1 200 OK for https://stackoverflow.com/|time=1s
or
$ bash check_http_proxy.sh http://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx 401 10
HTTP OK: HTTP/1.1 401 OK for http://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx|time=0s
答案4
我最近遇到了同样的问题,所以我将 wget 方法包装到了 Nagios 插件中https://github.com/SimpleFinance/nagios-check-http-proxy