[zabbix]-shell+zabbix监控网站https证书过期时间

目的是通过脚本监控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

 

[zabbix]-shell+zabbix监控网站https证书过期时间

 

执行

[zabbix]-shell+zabbix监控网站https证书过期时间

 

 

参考

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]-shell+zabbix监控网站https证书过期时间

 

在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]

[zabbix]-shell+zabbix监控网站https证书过期时间

 

 

1 创建主机群组

[zabbix]-shell+zabbix监控网站https证书过期时间

2 创建测试模板

[zabbix]-shell+zabbix监控网站https证书过期时间

 

3 点击创建好的模板 创建应用集

[zabbix]-shell+zabbix监控网站https证书过期时间

4 点击监控项 并创建监控项

[zabbix]-shell+zabbix监控网站https证书过期时间

 

5 在主机下面找到zabbix-server,并将新的模板 添加到zabbix-server里

[zabbix]-shell+zabbix监控网站https证书过期时间

 

[zabbix]-shell+zabbix监控网站https证书过期时间

6 点击监控 >最新数据 选择zabbix server主机应用集为cert_mon 就可以看到最新采集到的数据了

[zabbix]-shell+zabbix监控网站https证书过期时间

7 同理添加其余域名

8 创建触发器

[zabbix]-shell+zabbix监控网站https证书过期时间

 

 

这里为了触发告警 我写了900天 正常情况写30就可以了

[zabbix]-shell+zabbix监控网站https证书过期时间

 

[zabbix]-shell+zabbix监控网站https证书过期时间

点击更新

 

 

 

[zabbix]-shell+zabbix监控网站https证书过期时间

[zabbix]-shell+zabbix监控网站https证书过期时间

触发告警了

[zabbix]-shell+zabbix监控网站https证书过期时间

[zabbix]-shell+zabbix监控网站https证书过期时间

调整900为30之后 恢复

 

[zabbix]-shell+zabbix监控网站https证书过期时间

模板和脚本下载地址

链接:https://pan.baidu.com/s/1fYeCuiXW-q6CiOdJNlWuAA

提取码:9t5p