发送报警信息到企业微信里,企业微信机器人设置请自行百度~

ssl监控

#!/bin/bash

# 把需要监控的域名  填写在 下面的 数组里,中间使用 空格 分开
arr=(www.baidu.com:443  weixin.qq.com:443)

# 当前的时间戳
curr_date=`date +%s`

# 证书过期检查
for names_ssl   in ${arr[@]};
do
  #echo ${names_ssl}
  name_temp_ssl=`echo ${names_ssl} | awk -F: '{print $1}'`
  port_temp_ssl=`echo ${names_ssl} | awk -F: '{print $2}'`

  #get https cert data
  https_cert_date=$( timeout 25 openssl s_client -servername ${name_temp_ssl} -connect ${name_temp_ssl}:${port_temp_ssl} 2>/dev/null|openssl x509 -noout -dates 2>/dev/null)

  #echo ${https_cert_date}
  #get begin, end, curr date
  #date_notBefore=$(echo "${https_cert_date}"|grep -w notBefore|cut -d = -f2)
  date_notAfter=$(echo "${https_cert_date}"|grep -w notAfter|cut -d = -f2)

  #begin_date=$(date +%s -d "${date_notBefore}")
  # 获得过期时间 戳
  end_date=$(date +%s -d "${date_notAfter}")

  # 获得剩余天数
  expiry_date=$(($((${end_date}-${curr_date}))/(60*60*24)))

  # 输出
  #echo "域名 ${names_ssl}  ssl证书到期时间: ${date_notAfter}  剩余天数:${expiry_date}"

  end_date_temp=`date -d @${end_date}  "+%Y-%m-%d"`

  # 测试时间为30天内过期就发告警
  if [[ $expiry_date -lt 30 ]]
  then
      # 这个link是企业微信上的 群聊机器人助手、需要手动创建
      link='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ccccccccccccccccc'
      # content 里面的内容,不允许出现空格,不然会被微信给截断
      curl -X POST $link \
        -H 'Content-Type: application/json' \
        -d '
      {
          "msgtype": "markdown",
          "markdown": {
          "content": "
          **有报警信息请注意**
          >ssl证书信息: <font color=\"warning\">'${names_ssl}'</font>\n
          >到期时间: <font color=\"info\">**'${end_date_temp}'**</font>\n
          >剩余天数: <font color=\"red\">'${expiry_date},天后到期,请及时处理!!!'</font>"
          }
      }'
    fi
done

域名监控

#!/bin/bash

#监控工具检查
which whois > /dev/null 2> /dev/null
if [ $? -ne 0 ]
then
    yum install -y whois
fi
which bc > /dev/null 2> /dev/null
if [ $? -ne 0 ]
then
    yum install -y bc
fi

# 把需要监控的域名  填写在 下面的 数组里,中间使用 空格 分开
arr=(baidu.com  weixin.qq.com )

#域名过期检查
for var in ${arr[@]};
do
    #拿到过期的日期,假设是非.cn 域名
    e_d=`whois $var |grep 'Expiry Date' |awk '{print $4}' |cut -d 'T' -f 1`

    # 为空
    #(1)针对.cn 域名(无T,关键词:Expiration Time)
    if [ -z "$e_d" ]; then
       expiry_time=`whois $var |grep 'Expiration Time' |awk '{print $3" "$4}'`

       while [ -z "$expiry_time" ]; do
          sleep 3
          expiry_time=`whois $var |grep 'Expiration Time' |awk '{print $3" "$4}'`
       done

    #(2) 针对非 .cn 域名(有T,关键字:Expiry Date)
    ## 如果不为空,对时分秒做转换(默认是UTC,少了8小时, 进行date -d 转换)
    else
       hms=`whois $var |grep 'Expiry Date' |awk '{print $4}' |cut -d 'T' -f 2`
       e_d_hms=`date -d "$hms" | awk '{print $5}'`
       expiry_time="$e_d $e_d_hms"
    fi

    #计算过期时间戳
    e_d_s=`date -d "$expiry_time" +%s`
    #echo "域名 $var 的过期时间戳为: ${e_d_s}"

    expiry_date_s=`date -d @${e_d_s}`
    #3、计算今天的时间戳
    today_s=`date +%s`

    #4、计算过期时间戳和今天时间戳的差值,得到剩余天数
    expiry_date=$(($(($e_d_s-$today_s))/(60*60*24)))
    #echo "剩余天数: $expiry_date "

    #curl 报警中, 时分秒这种日期
    expiry_day=`echo $expiry_time | awk '{print $1}'`
    #echo "域名:  ${var} 到期日期: ${expiry_time}, 剩余: $expiry_date 天 !!!!"

    # 测试时间为30天内过期就发告警
    if [[ $expiry_date -lt 30 ]]
    then
        DATE=`date +%F_%T`
        #echo "域名:${var} 将在$expiry_day 到期,剩余天数: $expiry_date 天,请及时处理!!!"

         # 这个link是企业微信上的 群聊机器人助手、需要手动创建
        link='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=cccccccccccccccccccccc'

        # content 里面的内容,不允许出现空格,不然会被微信给截断
        curl -X POST $link \
        -H 'Content-Type: application/json' \
        -d '
        {
                "msgtype": "markdown",
                "markdown": {
                "content": "
                **有报警信息请注意**
                >域名名称: <font color=\"warning\">'${var}'</font>\n
                >到期时间: <font color=\"info\">**'${expiry_day}'**</font>\n
                >剩余天数: <font color=\"red\">'${expiry_date},天后到期,请及时处理!!!'</font>"
                }
        }'
    fi
done
文档更新时间: 2025-01-07 09:20   作者:月影鹏鹏
IT运维支持-AIWALY-月影工作室