[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

 

 

执行

 

 

参考

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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值