前言
zabbix通过自定义key"domain.discovery"
发现域名(Json格式),然后自动生成监控项,监控项通过自定义key"https"
获取域名证书有效期,若少于30天则出发告警。
说明
名称 | 作用 |
---|---|
domain.txt | 域名列表,存放需要监控的域名 |
get_domain.sh | zabbix通过这个脚本发现域名 |
ssl_check.sh | zabbix通过这个脚本获取域名证书有效期 |
步骤
1、在/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts
下创建domain.txt、get_domain.sh、ssl_check.sh
这三个文件
2、创建zabbix自定义监控项
#获取域名domain.txt中的域名
UserParameter=domain.discovery,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/get_domain.sh
#检测域名证书过期时间
UserParameter=https[*],/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/ssl_check.sh $1
3、在zabbix配置自动发现规则
4、在zabbix配置自动生成监控项
5、在zabbix配置告警触发器
6、成功监控
附件
- domain.txt
abc.xx.com.cn
rown.xxx.com.cn
- get_domain.sh
#/bin/bash
file_path=$(dirname $0)
CONFIG_FILE="$file_path/domain.txt"
Check(){
grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -vE '^ *[a-Z]+' &> /dev/null
if [ $? -eq 0 ]
then
echo Error: ${CONFIG_FILE} Contains Invalid Domain.
exit 1
else
domainarray=($(grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -E '^ *[a-Z]+'))
fi
}
DomainDiscovery(){
length=${#domainarray[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#DOMAIN}\":\"${domainarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
}
domain(){
Check
DomainDiscovery
}
domain
- ssl_check.sh
#/bin/bash
#################Version Info#######################
#Author: Bertram
#Create Date:2023-05-31
#Attention: 通过域名获取证书的过期时间
####################################################
#获取证书时间
end_time=`echo |openssl s_client -connect $1:443 2>/dev/null|openssl x509 -noout -dates|awk -F= '/After/{print $2}'`
#把证书时间转换为时间戳
end_timestamp=`date +%s -d "$end_time"`
#获取今天的时间戳
today=`date +%s`
#计算还有证书几天过期
date=$((($end_timestamp - $today)/86400))
echo $date
如有不足的地方请指出!