運用
証明書更新とメンテナンススクリプトを監視する
certbot renew、ログローテーション、クリーンアップジョブが実際に実行されたことを確認し、実行されなかった場合は通知を受け取る。
問題点
メンテナンス cron は最も忘れやすく、失敗したときの影響が最も大きいものです。サイレントに停止した certbot の更新は、証明書が期限切れになってサイトが一斉にダウンするまで表面化しません。ログローテーション、ディスククリーンアップ、アンチウイルススキャンも同様 — 気づかない間に問題が積み上がります。
SteadyCron による解決方法
- 1 各メンテナンスタスクに実際のスケジュール(certbot タイマー、週次ローテーション、夜間クリーンアップ)に合わせたハートビートチェックを作成します。
- 2 タスクの末尾で成功時に ping し、コマンドがゼロ以外を返した場合は /fail に ping します。
- 3 グレースピリオドを設定し、若干遅れた実行はアラートを出さず、見逃した実行はアラートが出るようにします。
- 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
Export all as manifest
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、ディスククリーンアップ、バックアップ検証、インデックス再構築ジョブ — スケジュール通りに動き、停止したときに重要なものであれば、ハートビートを設定しましょう。
関連ドキュメント
気づいたときには手遅れにならないために
無料プランで始めましょう — クレジットカード不要。
無料で始める