ZabbixからSSL証明書の有効期限を監視する
先日、一部のサービスで利用しているSSL証明書の有効期限が切れる障害を起こしてしまいました。 SSL証明書にはLet’s Encrypを利用しており、事前に通知が来ていたにも関わらず、更新を忘れてしまっていました。 これをふまえて、業務フローを見直すとともに、SSL証明書の有効期限をZabbixで監視することにしました。
Zabbixから監視するには、以下の記事を参考にしました。
ZabbixでSSL証明書有効期限を監視する - Qiita
違いとしては、スクリプトをZabbixサーバに配置せず、監視対象のWebサーバのメトリクスとして残り日数を取得するようにしました。
SSL証明書の残り日数は、以下のスクリプトで取得します。 引数でホスト名を指定出来るようにしてあります。
date +"%s" --date="`openssl s_client -connect $1:443 -servername $1 </dev/null 2>/dev/null | openssl x509 -enddate -noout | cut -d'=' -f2`" | awk '{printf("%d\n",($0-systime())/86400-1/86400+1)}'
監視対象の zabbix_agentd.conf へ、以下を追加します。 Zabbixで指定したホスト名を、上記スクリプトへ渡すようにしています。
UserParameter=ssl_cert_days.[*], /var/git/infra/bin/ssl_cert_days.sh $1
続いてアイテムを作成します。 Typeでホスト名を指定しています。
項目 | 値 |
---|---|
Name | ssl_cert_days.example.com |
Type | Zabbix agent |
Key | ssl_cert_days.[example.com] |
Update interval | 1d |
アイテムの次はトリガを作成します。 余裕を持って14日前に通知が来るようにして、SSL証明書を更新するようにします。
項目 | 値 |
---|---|
Name | ssl certificate of example.com has expired |
Severity | Warning |
Expression | {zabbix-server:ssl_cert_days.[example.com].last()}<14 |
以上で、ZabbixからSSL証明書の有効期限を監視する仕組みをつくることが出来ました。