Zabbix 使用之监控 SSL 证书到期剩于天数

域名使用的是Let's Encrypt免费证书,通过certbot自动续期。

有些直接用于项目的证书是通过DNS手动申请的,为了避免证书过期导致项目不可用,就需要监控下证书过期剩于天数。

创建监控脚本

  1. 每行一个域名保存在domain.txt

    1
    2
    3
    4
    $ cat /etc/zabbix/zabbix_agentd.d/domain.txt
    yeadoc.cn
    www.yeadoc.cn
    repo.yeadoc.cn
  2. 脚本domain_discovery.sh用于自动发现域名

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/bin/bash
    #Fucation:docker low-level discovery
    domain_discovery() {
    #port=($(sudo docker ps -a|grep -v "CONTAINER ID"|awk '{print $NF}'))
    port=($(grep -Ev "^#|^$" /etc/zabbix/zabbix_agentd.d/domain.txt))
    printf '{\n'
    printf '\t"data":[\n'
    for key in ${!port[@]}
    do
    if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
    printf '\t {\n'
    printf "\t\t\t\"{#DOMAINNAME}\":\"${port[${key}]}\"},\n"

    else [[ "${key}" -eq "((${#port[@]}-1))" ]]
    printf '\t {\n'
    printf "\t\t\t\"{#DOMAINNAME}\":\"${port[${key}]}\"}\n"

    fi
    done

    printf '\t ]\n'
    printf '}\n'
    }

    domain_discovery
  3. 脚本cert_check.sh用于检测SSL证书到期剩于天数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/sh
    ### SSL Certificate Expire Day Check Script ###
    if [ "$1" = '' ];then
    echo "Need URL."
    exit 1;
    fi
    TARGET_URL=$1
    EXP_DAY=`openssl s_client -connect ${TARGET_URL}:443 -servername ${TARGET_URL} < /dev/null 2> /dev/null | openssl x509 -text 2> /dev/null | grep "Not After" | sed -e 's/^ *//g' | cut -d " " -f 4,5,6,7,8`
    NOW_TIME=`date +%s`
    EXP_TIME=`date +%s -d "${EXP_DAY}"`
    if [ "${EXP_DAY}" != '' -a ${NOW_TIME} -lt ${EXP_TIME} ]; then
    echo $(((EXP_TIME-NOW_TIME)/(60*60*24)))
    else
    echo "ERROR"
    exit 1;
    fi

配置Zabbix-agent

1
2
3
$ cat /etc/zabbix/zabbix_agentd.d/cert_check.conf
UserParameter=domain_discovery,/etc/zabbix/zabbix_agentd.d/domain_discovery.sh
UserParameter=cert_check[*],/etc/zabbix/zabbix_agentd.d/cert_check.sh $1

配置Zabbix-web

  1. 创建发现规则
    点选Configuration->Hosts,选择脚本存放主机yeadoc-dev->Discovery

    填写NameKeydomain_discovery

  2. 创建监控项,填写NameKey

  3. 创建触发器,填写NameExpression

查看结果

一分、两分都是爱!