証明書更新とメンテナンススクリプトを監視する

certbot renew、ログローテーション、クリーンアップジョブが実際に実行されたことを確認し、実行されなかった場合は通知を受け取る。

問題点

メンテナンス cron は最も忘れやすく、失敗したときの影響が最も大きいものです。サイレントに停止した certbot の更新は、証明書が期限切れになってサイトが一斉にダウンするまで表面化しません。ログローテーション、ディスククリーンアップ、アンチウイルススキャンも同様 — 気づかない間に問題が積み上がります。

SteadyCron による解決方法

  1. 1 各メンテナンスタスクに実際のスケジュール(certbot タイマー、週次ローテーション、夜間クリーンアップ)に合わせたハートビートチェックを作成します。
  2. 2 タスクの末尾で成功時に ping し、コマンドがゼロ以外を返した場合は /fail に ping します。
  3. 3 グレースピリオドを設定し、若干遅れた実行はアラートを出さず、見逃した実行はアラートが出るようにします。
  4. 4 証明書が実際に期限切れになる数日前に通知を受け取り、落ち着いて対処する時間を確保します。
# /etc/cron.daily/certbot-renew
TOKEN=<your-ping-token>
if certbot renew --quiet; then
  curl -fsS https://ping.steadycron.com/$TOKEN
else
  curl -fsS https://ping.steadycron.com/$TOKEN/fail
fi
app.steadycron.com/jobs

Jobs

New job
Search jobs…
All HTTP Heartbeat
Status Group: env
env:prod 5 jobs 1 failing
weekly-digest-email HTTP 0 9 * * 1 in 2 days 3 days ago
nightly-db-backup Heartbeat 0 2 * * * in 19 h 5 h ago
stripe-reconciliation HTTP 0 */4 * * * in 38 min 3 h ago
cache-warmup HTTP */15 * * * * in 11 min now
search-index-sync Heartbeat */30 * * * * in 6 min 24 min ago
env:dev 3 jobs
seed-test-data HTTP 0 4 * * * in 14 h 10 h ago
preview-env-cleanup Heartbeat 0 */6 * * * in 2 h 4 h ago
trial-expiry-sweep HTTP 0 6 * * * yesterday

すべてのジョブのステータス、スケジュール、最終実行 — ひと目でわかる。

将来の障害を落ち着いたチケットに変える

要点はリードタイムです。期限切れ3日前に見逃した更新は5分で修正できます。期限切れの瞬間に発覚した同じ更新は全員対応の障害になります。SteadyCron は前者を提供します。

タイマーで動くものすべてに使える

certbot、logrotate、ディスククリーンアップ、バックアップ検証、インデックス再構築ジョブ — スケジュール通りに動き、停止したときに重要なものであれば、ハートビートを設定しましょう。

関連ドキュメント

気づいたときには手遅れにならないために

無料プランで始めましょう — クレジットカード不要。

無料で始める