EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

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証明書の有効期限を監視する仕組みをつくることが出来ました。