目的是通过脚本监控https证书,在要过期前30天告警。
shell版本
创建一个监控的shell脚本 check_domain_time.sh如下
#!/bin/bash # 加载环境变量 . /etc/profile . ~/.bash_profile . /etc/bashrc
# 脚本所在目录即脚本名称 script_dir=$( cd "$( dirname "$0" )" && pwd ) script_name=$(basename ${0})
readFile="${script_dir}/domain_ssl.info" grep -v '^#' ${readFile} | while read line;do # 读取存储了需要监测的域名的文件 # echo "${line}" get_domain=$(echo "${line}" | awk -F ':' '{print $1}') get_port=$(echo "${line}" | awk -F ':' '{print $2}')
# echo ${get_domain} # echo "${get_port}" # echo "======"
# 使用openssl获取域名的证书情况,然后获取其中的到期时间 END_TIME=$(echo | openssl s_client -servername ${get_domain} -connect ${get_domain}:${get_port} 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )
END_TIME1=$(date +%s -d "$END_TIME") # 将日期转化为时间戳 NOW_TIME=$(date +%s -d "$(date | awk -F ' +' '{print $2,$3,$6}')") # 将当前的日期也转化为时间戳
RST=$(($(($END_TIME1-$NOW_TIME))/(60*60*24))) # 到期时间减去目前时间再转化为天数
echo "${RST}" if [ ${RST} -lt 30 ]; then echo "${get_domain} https 证书少于3o天,存在风险" #发送email else echo "${get_domain} https 证书3o天以上,不存在风险" fi done |
创建一个存放域名的文件domain_ssl.info 如下
# 检测ac域名
www.aircourses.com:443 # 检查pd域名 www.pdabc.com:443 |
执行
参考
http://www.zhangblog.com/2019/06/24/domainexpire/#comments
改造一下 自己打算用在zabbix上 通过参数的值 监控不同的域名
所以需要往脚本传入参数
创建一个新的脚本如下
#!/bin/bash # @Time : 2019-10-19 # @Author : jiaminxu # @Description :域名https证书监控
# 加载环境变量 source /etc/profile
# 脚本所在目录即脚本名称 script_dir=$( cd "$( dirname "$0" )" && pwd ) script_name=$(basename ${0})
domain="$1" #readFile="${script_dir}/domain_ssl.info" echo ${domain} | while read line;do # 读取存储了需要监测的域名的文件 # echo "${line}" get_domain=$(echo "${line}" | awk -F ':' '{print $1}') get_port=$(echo "${line}" | awk -F ':' '{print $2}')
# echo ${get_domain} # echo "${get_port}" # echo "======"
# 使用openssl获取域名的证书情况,然后获取其中的到期时间 END_TIME=$(echo | openssl s_client -servername ${get_domain} -connect ${get_domain}:${get_port} 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )
END_TIME1=$(date +%s -d "$END_TIME") # 将日期转化为时间戳 NOW_TIME=$(date +%s -d "$(date | awk -F ' +' '{print $2,$3,$6}')") # 将当前的日期也转化为时间戳
RST=$(($(($END_TIME1-$NOW_TIME))/(60*60*24))) # 到期时间减去目前时间再转化为天数
echo "${RST}" # if [ $RST -lt 30 ]; then # echo "${get_domain} https 证书少于30天,存在风险" # else # echo "${get_domain} https 证书3o天以上,不存在风险" # fi done |
在zabbix-server上安装下面软件
yum -y install zabbix-get
修改zabbix-server上的zabbix_agentd.conf
添加一行 用于传入参数 并获取和参数地址的延迟
UserParameter=cert.date[*],sh /etc/zabbix/scripts/check_domain_time.sh $1
添加执行权限
chmod 777 /usr/bin/zabbix_get
chmod +x /etc/zabbix/scripts/check_domain_time.sh
重启zabbix-agent服务
service zabbix-agent restart
测试命令
zabbix_get -s 127.0.0.1 -p 10050 -k cert.date[www.aircourses.com:443]
1 创建主机群组
2 创建测试模板
3 点击创建好的模板 创建应用集
4 点击监控项 并创建监控项
5 在主机下面找到zabbix-server,并将新的模板 添加到zabbix-server里
6 点击监控 >最新数据 选择zabbix server主机应用集为cert_mon 就可以看到最新采集到的数据了
7 同理添加其余域名
8 创建触发器
这里为了触发告警 我写了900天 正常情况写30就可以了
点击更新
触发告警了
调整900为30之后 恢复
模板和脚本下载地址
链接:https://pan.baidu.com/s/1fYeCuiXW-q6CiOdJNlWuAA
提取码:9t5p