これはQiita:Teamからの転載です。
参考および同じようなことをされていたエントリ
- ZabbixでSSL証明書の有効期限監視(1つのサーバーに複数のホストがあるとき) - Qiita
- ZabbixでSSL証明書の有効期限を監視する - Qiita
- Zabbix3.0でSSL証明書有効期限を監視する - Qiita
前提
- サーバ証明書の有効期限が切れる○日前にZabbixからアラートがあがる と嬉しい
- いま○日前か をZabbixが把握する必要はない
- 有効期限切れまで○日前を切ったことを知れる のが重要
上記前提に基づいている
Zabbix Userparameter で以下を設定
- ワンライナーで完結するようした
/etc/zabbix/zabbix_agentd.d/userparameter_sslcertificatecheck.conf
UserParameter=sslcert.notaftercheck[*],echo $$(( $$(date -d "$$(openssl s_client -connect $1:$2 -servername $1 < /dev/null 2> /dev/null |openssl x509 -text |grep 'Not After' | cut -d':' -f 2-)" +'%Y%m%d') > $$(date -d "$3 days" +'%Y%m%d') ))
sslcert.notaftercheck[*] | []の中にカンマ区切りで引数設定可能 | |
$1 | []内引数の1番目 | 確認したい証明書が設置されているFQDN1 |
$2 | []内引数の2番目 | 4432 |
$3 | []内引数の3番目 | 60 とか 30 とか3 |
$$ | ワンライナー実行時に $ になる | $$(command) -> $(command) |
やってることはこういうことです
#!/bin/bash
FQDN=subdomain.example.com
HTTPSPORT=443
DAY=30 # この場合30日前check
DOLLAR_1=${FQDN}
DOLLAR_2=${HTTPSPORT}
DOLLAR_3=${DAY}
NOTAFTER_YYYYMMDD=$(date -d "$(openssl s_client -connect ${DOLLAR_1}:${DOLLAR_2} -servername ${DOLLAR_1} < /dev/null 2> /dev/null |
openssl x509 -text |
grep 'Not After' |
cut -d':' -f 2-)" +'%Y%m%d')
N_DAYS_LATER_YYYYMMDD=$(date -d "${DOLLAR_3} days" +'%Y%m%d') # この場合実行日から30日後の日付
echo ${NOTAFTER_YYYYMMDD} \> ${N_DAYS_LATER_YYYYMMDD}
echo $(( ${NOTAFTER_YYYYMMDD} > ${N_DAYS_LATER_YYYYMMDD} )) # 偽なら0が返る前提なのでZabbixのトリガーは0を待ち構える形
output
20160908 > 20160703
1