Edited at

ZabbixでSSL証明書の有効期限を監視する

More than 3 years have passed since last update.

zabbix-agentでsslの証明書の有効期限を監視するため、

UserParameterに残り日数を出力するコマンドを書きました。


2015/10/22 更新

UserParameter に -servername $1 を追加しました。

ZabbixでSSL証明書の有効期限監視(1つのサーバーに複数のホストがあるとき)


Zabbixのアイテム設定

タイプ: Zabbixエージェント

キー: cert_expire_check[host,port,timeout]
データ型: 数値(整数)

host: 接続先ホスト名
port: 接続先ポート名
timeout: opensslコマンドで接続する時のタイムアウト秒
※3項目とも設定必須


zabbix-agentd.confへの設定追加


zabbix-agentd.conf

Timeout=10

UserParameter=cert_expire_check[*],export UTIME=$(date +%s); expr $(( $(date --date "$(timeout $3 openssl s_client -connect $1:$2 -servername $1 < /dev/null 2>/dev/null| openssl x509 -text 2>/dev/null | awk -v UTIME=$UTIME '/Not After :/{if($$0~/N/){print $$4,$$5,$$6,$$7,$$8}else{print "@"UTIME}}')" +%s) - $UTIME )) / 86400



zabbix_getでテスト


zabbix_get

正常系

$ /usr/local/zabbix/bin/zabbix_get -s localhost -k cert_expire_check[ma3ki.net,443,5]
14
$ /usr/local/zabbix/bin/zabbix_get -s localhost -k cert_expire_check[ma3ki.net,465,5]
14
$ /usr/local/zabbix/bin/zabbix_get -s localhost -k cert_expire_check[mail.yahoo.co.jp,443,5]
129

接続できない場合
$ /usr/local/zabbix/bin/zabbix_get -s localhost -k cert_expire_check[ma3ki.net,80,5]
0

接続タイムアウト(zabbix-agentのタイムアウトに先に引っかかった場合)
# /usr/local/zabbix/bin/zabbix_get -s localhost -k cert_expire_check[yahoo.co.jp,443,10]
ZBX_NOTSUPPORTED: Timeout while executing a shell script.

接続タイムアウト(5秒以内に接続先の応答がない場合)
# /usr/local/zabbix/bin/zabbix_get -s localhost -k cert_expire_check[yahoo.co.jp,443,5]
0

エラーは0を返します。