使用zabbix监控网站ssl证书到期,避免由于网站证书到期,而导致网站访问异常!
当前系统Centos7.6,此方式只需要在zabbix-server主机上运行一个zabbix-agent,然后在web页面配置监控所需要的域名即可(任意域名都可以),如果当前主机已经安装好了zabbix-agent,下面前两步可忽略!
注意:网上大部分的脚本都有问题,虽然都能获取到到期时间,但是要注意的是,获取的剩余到期时间并不是很准确。另外,还有个问题,如果有多个二级域名,它们的证书到期时间都不一样,但是脚本检测出来的时间都是一样的。
原因:网上很多脚本获取证书时间的时候都没有指定-servername参数,所以才会导致此问题的出现!!!这是一坑……
1、同步好主机时间
1 2 |
yum -y install ntp /usr/sbin/ntpdate ntp1.aliyun.com |
2、配置zabbix4.0源
官方源(速度有时候很不理想)
1 |
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm |
或者可以考虑使用清华大学的源
1 |
wget -P /etc/yum.repos.d/ https://down.whsir.com/downloads/zabbix.repo |
3、安装zabbix-agent4.0
1 |
yum install zabbix-agent |
4、启动zabbix-agent
1 2 |
systemctl enable zabbix-agent systemctl start zabbix-agent |
5、配置ssl检测
1 2 |
mkdir /etc/zabbix/script cd /etc/zabbix/script |
1 |
vi ssl_certificates_check.sh |
1 2 3 4 5 6 |
#!/bin/bash time=`openssl s_client -servername $1 -connect $1:443 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2` time1=`date +%s -d "$time"` time2=$(( $time1 - `date +%s`)) time3=$(( $time2 / 24 / 3600 )) echo $time3 |
给予执行权限
1 |
chmod +x ssl_certificates_check.sh |
添加一个userparameter_ssl_certificates_check.conf文件
1 |
vi /etc/zabbix/zabbix_agentd.d/userparameter_ssl_certificates_check.conf |
1 |
UserParameter=ssl_check[*],/etc/zabbix/script/ssl_certificates_check.sh $1 |
6、重启zabbix-agent
1 |
systemctl restart zabbix-agent |
7、使用zabbix-get检测配置
1 |
yum install zabbix-get |
1 |
zabbix_get -s 127.0.0.1 -p 10050 -k ssl_check[blog.whsir.com] |
如果看到正常返回ssl证书到期值,表示配置正确,可以进入web页面进行配置了
8、开始进入web页面配置
配置-主机-创建主机ssl_certificates_check
创建好主机后添加监控项ssl_check $1,注意我这里更新间隔是1d,为了演示效果,建议先配置成30s,后续配置图形无误后,再把这个值改成1d,证书的到期时间毕竟是固定的,如果长期配置成30s的话很浪费资源!
9、创建触发器
触发器的这个时间根据情况自行设置,我这里以30天为单位
问题表现形式设置ssl证书小于等于30天触发警告
1 |
{ssl_certificates_check:ssl_check[blog.whsir.com].last()}<=30 |
恢复表达式设置ssl证书大于30天恢复警告
1 |
{ssl_certificates_check:ssl_check[blog.whsir.com].last()}>30 |
10、添加图形,勾选查看触发器,添加监控项
至此ssl证书监控配置完成,后续可以搭配邮件功能进行邮件报警
原文链接:zabbix4.0监控ssl证书到期,转载请注明来源!
您好,因为我有多组SSL凭证需要管理,所以使用您的脚本( ssl_certificates_check.sh )得出来的时间数据并不正确,调整过参数后,导致每个SSL凭证时间都不正确,因此想询问是否有更好的方式
感谢您的分享,因为此疑惑,才来这边做学习跟讨论,谢谢您