【へるすちぇっく】

ヘルスチェック とは?

最終更新:
💡 元気ですか?をサーバーに聞き続ける

サービスやサーバーの状態を、応答や実行結果などで確認する仕組み。通知・振り分け停止・再起動などに利用できるが、判定範囲と対応は種類や設定によって異なる。

📌 このページのポイント
ヘルスチェックは状態の確認と判断材料 ロードバランサー 定期的に確認 例:GET /health サーバーA 200 OK サーバーB 200 OK サーバーC タイムアウト 結果の使い方は目的と設定で変わる liveness 失敗の閾値で 再起動判断 readiness 未準備なら 振り分け対象外 startup 起動の完了を 確認する
上段はHTTP確認の例。ALBは全対象不健康ならfail-open。下段はKubernetesの用途で、再起動は閾値・ポリシーに従う。
ひよこ ひよこ
サーバーが落ちてるのにしばらく気づかなくて、ユーザーから問い合わせが来ちゃった…。
ペンギン先生 ペンギン先生
定期的なチェックと通知を組み合わせれば、早く気づける場合があるよ。例えば /health にリクエストを送り、応答コードや時間で判定するんだ。チェックだけで通知が必ず届くわけではなく、監視側の通知設定も必要だよ。
ひよこ ひよこ
ただ生きてるかどうかを確認するだけ?
ペンギン先生 ペンギン先生
設計によってDBや外部APIの状態も調べられるよ。ただし何でも含めればよいわけではない。再起動判断用のチェックに外部障害を含めると、再起動しても直らず障害を広げることがあるんだ。
ひよこ ひよこ
チェックした結果はどう使うの?
ペンギン先生 ペンギン先生
ロードバランサーの振り分けや、Kubernetesの再起動判断などに使うよ。ただし種類と設定で動きは違う。AWS ALBは全対象が不健康だと不健康な対象にも送るfail-openという例外があるんだ。
ひよこ ひよこ
ヘルスチェックの間隔ってどのくらいが適切なの?
ペンギン先生 ペンギン先生
必要な検知時間と負荷で決めるよ。AWS ALBの既定間隔はinstance・ipターゲットなら30秒、lambdaなら35秒。失敗回数の閾値もあるから、一度失敗したら即座に切り替わるとは限らないんだ。
ひよこ ひよこ
ヘルスチェックのエンドポイントって何を返すべきなの?
ペンギン先生 ペンギン先生
目的で分けよう。Kubernetesのlivenessは再起動の判断、readinessはトラフィックを受けられるかの判断、startupは起動完了の確認だよ。HTTPの成功コードだけでなく、何を正常とみなすか、閾値や再起動ポリシーまで設計する必要があるんだ。
もっと詳しく知りたい人へ

200 OKならサービス全体が正常なの?

そのエンドポイントの判定条件を満たしたという意味です。DBを確認しない実装ならDB障害はわかりません。一方、外部DBの障害をliveness失敗にすると不要な再起動を招きます。利用可能性の確認と再起動の判断を分けて設計します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ヘルスチェック」って出てきたら「サービスが正常に動いているか自動で確認する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Health Check」 = 健康診断
💬 医療の健康診断になぞらえて、システムの状態を定期的に検査することを指す

参考資料

← 用語集にもどる