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を返します。