dmli的博客小屋

专注IT运维

使用zabbix监控https域名证书有效期

一、思路

zabbix自带的监控模版,是没有https证书有效期监控功能的。对于拥有大量Let's Encrypt免费证书的管理员来说,证书有效期提醒非常重要。因为之前用nagios的时候,是可以监控证书有效期的,所以这里我考虑直接引入nagios的插件“check_http”,创建zabbix自定义监控项来完成这项工作。

二、nagios plugin安装

安装都很简单了,需要注意的是编译安装时需要带上openssl选项。

wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz#_ga=2.161100925.179589927.1534837802-754351232.1526614897
tar -zxf nagios-plugins-2.2.1.tar.gz
yum install -y openssl-devel
cd nagios-plugins-2.2.1
./configure --with-openssl
make && make install

插件默认安装到了 /usr/local/nagios/libexec

我们先观察一下check_http查看证书有效期返回的格式:

# ./check_http -H www.baidu.com -C 1
SSL OK - Certificate 'baidu.com' will expire on 2019-05-26 13:31 +0800/CST. HTTP OK: HTTP/1.1 200 OK - 912 bytes in 0.038 second response time |time=0.037553s;;;0.000000 size=912B;;;0

-H参数指定主机名,-C参数指定告警阈值,我们可以看到,第9第10列即我们需要的时间。之所以告警阈值设为1,是因为我们不需要在这里配置告警,如果产生告警了会改变输出格式,那么采集的数据就不对了。

三、配置item

新建item配置文件:

/etc/zabbix/zabbix_agentd.d/certificate_check.conf

UserParameter=ssl.status[*],/etc/zabbix/zabbix_agentd.d/certificate_check.sh $1

新建检测脚本:

/etc/zabbix/zabbix_agentd.d/certificate_check.sh

#!/bin/bash
plugin_dir=/usr/local/nagios/libexec
current_time=`date +%s`
case $1 in
muzifei)
	expr_time=`date -d "$(${plugin_dir}/check_http -t 20 -H www.muzifei.com -u /post/gitlab_update.html -C 1|awk '{print $9,$10}')" +%s`
	expr ${expr_time} - ${current_time}
	;;
baidu)
	expr_time=`date -d "$(${plugin_dir}/check_http -t 20 -H ww.baidu.com  -C 1|awk '{print $9,$10}')" +%s`
	expr ${expr_time} - ${current_time}
	;;
qq)
	expr_time=`date -d "$(${plugin_dir}/check_http -t 20 -H www.qq.com -u /evh/api -C 1|awk '{print $9,$10}')" +%s`
	expr ${expr_time} - ${current_time}
esac

到zabbix网页新建item,注意单位选择秒“s”:

image.png

最终效果:

image.png

更新:

在实际应用中,经常获取不到值,也不知道为什么,所以对该脚本做了修改,直接获取日期而不做任何计算:

#!/bin/bash
plugin_dir=/usr/local/nagios/libexec
current_time=`date +%s`
case $1 in
muzifei)
	${plugin_dir}/check_http -t 20 -H www.muzifei.com -u /post/gitlab_update.html -C 1|awk '{print $9,$10}'
	;;
baidu)
	${plugin_dir}/check_http -t 20 -H ww.baidu.com  -C 1|awk '{print $9,$10}'
	;;
qq)
	${plugin_dir}/check_http -t 20 -H www.qq.com -u /evh/api -C 1|awk '{print $9,$10}'
esac

然后item选项“Type of information”修改为“Text”。

发表评论:

Copyright© dmli 2015-2019