Azure App ServiceのHealth checkでインスタンスの正常性を監視する方法と運用注意点

Azure App Serviceの「Monitor the Health of App Service Instances – Azure App Service」で押さえるべき結論は、Health checkを有効にするだけでは不十分で、ヘルスチェック用パスの設計、2インスタンス以上の構成、デプロイスロットとの整合性、認証・リダイレクト設定まで確認する必要があるという点です。

Health checkは、Azure App Service上の異常なインスタンスをロードバランサーから外し、状態が戻れば復帰させ、異常が続く場合はインスタンスの置き換えまで行う可用性向上のための機能です。特に本番環境では、単なる監視メトリックではなく「障害時にどのインスタンスへトラフィックを流すか」を左右する設定として扱う必要があります。Microsoft Learnの日本語ページでは最終更新日が2025年11月4日と表示されているため、本稿では2026年5月6日時点で確認すべきAzure App Service Health checkの運用ポイントとして整理します。(Microsoft Learn)

目次

Azure App ServiceのHealth checkとは

Azure App ServiceのHealth checkは、指定したアプリケーション内のURLパスに対して、App Serviceが定期的にpingを行い、各インスタンスの状態を判定する機能です。指定するパスに既定値はなく、/health/api/health など、アプリ側で実際に存在するエンドポイントを用意する必要があります。(Microsoft Learn)

重要なのは、Health checkが「サイトが落ちているかを見るだけ」の機能ではないことです。異常と判定されたインスタンスは、Webアプリのロードバランサーから除外されます。復旧して200〜299のステータスコードを返すようになれば、再びロードバランサーに戻されます。さらに、異常状態が1時間続いた場合は、新しいインスタンスへの置き換えも行われます。(Microsoft Learn)

つまりHealth checkは、次の3つを組み合わせた機能です。

観点役割実務上の意味
監視指定パスを1分間隔で確認アプリ単位でインスタンスの状態を把握できる
トラフィック制御異常インスタンスをロードバランサーから除外ユーザーを壊れたインスタンスに誘導しにくくなる
自動復旧異常が続くインスタンスを置き換え手動対応前に一定の自己回復が期待できる

何が変わるのか:運用上の焦点は「有効化」から「正しく効く設計」へ

今回確認すべきポイントは、新しい画面操作そのものよりも、Health checkを本番運用に組み込む際の判断基準です。Azure Advisorでも、App Serviceの本番ワークロードではHealth checkの利用が推奨事項として扱われており、異常インスタンスの回避と置き換えによる信頼性向上が期待されると説明されています。(Microsoft Learn)

特に、管理者や開発者が意識すべき変更点・確認点は次のとおりです。

確認ポイントこれまで見落としやすかった点対応の方向性
ヘルスチェックパストップページや単純な静的URLを指定してしまう依存先を含めてアプリが本当に使える状態か確認する
インスタンス数1インスタンスで有効化して満足してしまう本番は2インスタンス以上を基本にする
ステータスコードリダイレクトや認証で200以外になる200〜299を返す専用パスを用意する
デプロイ設定変更でアプリが再起動するステージングスロットで検証してから本番反映する
複数アプリ構成同じApp Serviceプラン上の他アプリへの影響を見落とすプラン単位の影響範囲を事前に確認する

Health checkの動作を具体的に理解する

Health checkは、指定したパスに対してすべてのApp Serviceインスタンスから1分間隔でpingを実行します。既定では、10回の要求で200〜299のステータスコードが返らない場合、そのインスタンスは異常と判断され、ロードバランサーから削除されます。失敗回数のしきい値は、アプリ設定で最小2回まで変更できます。(Microsoft Learn)

動作を時系列で見ると、次のようになります。

タイミングApp Serviceの動作管理者・開発者が見るべきこと
Health check有効化後指定パスへ1分間隔でping/health などが確実に応答するか
連続失敗インスタンスを異常と判定500系、タイムアウト、リダイレクト、認証エラーを確認
異常判定後ロードバランサーから除外残りインスタンスに負荷が集中しないか
正常応答に回復ロードバランサーへ復帰復旧後に自動復帰できるか
1時間異常が継続インスタンス置き換え同一プラン上の他アプリへの影響を確認

ここで注意したいのは、Health checkの失敗は「アプリが完全に停止している」場合だけでは発生しないことです。たとえば、データベース接続が枯渇している、メッセージング基盤に接続できない、ウォームアップが終わっていない、認証リダイレクトが発生している、といった状態でも異常判定につながります。

対象者と影響範囲

Health checkの設定は、Azure App Serviceを運用する複数の担当者に影響します。特に本番アプリ、API、社内業務システム、BtoC向けWebサービスでは、開発・インフラ・運用の担当範囲を分けずに確認したほうが安全です。

対象者主な影響確認すべきこと
Azure管理者App Serviceプラン、スケール、監視、アラートに影響インスタンス数、プラン、Azure Monitor設定
アプリ開発者ヘルスチェック用エンドポイントの実装が必要200〜299を返す条件、依存先チェック、認証除外
SRE・運用担当障害時の切り離し、復旧、通知に影響アラート、ログ、手動再起動手順
セキュリティ担当匿名アクセスや内部ヘッダー検証に影響IP制限、クライアント証明書、内部トークン検証
リリース担当設定変更やスロットスワップに影響ステージングスロット、本番反映手順

Health checkを有効化する手順

Azure portalでHealth checkを有効化する基本手順はシンプルです。Azure portalで対象のApp Serviceアプリを開き、左側メニューの「監視」から「正常性チェック」を選択し、有効化したうえで /health/api/health などの有効なURLパスを指定して保存します。(Microsoft Learn)

ただし、本番環境では「手順どおりに有効化する」だけで終わらせないことが重要です。保存時にアプリが再起動するため、Microsoftは運用アプリへの影響を抑えるためにステージングスロットを構成し、本番へスワップする方法を推奨しています。(Microsoft Learn)

有効化前に確認するチェックリスト

項目確認内容NG例
パスの存在指定したURLがアプリ内に存在する存在しない /healthcheck を指定する
応答コード正常時に200〜299を返す301、302、307、401、500を返す
応答時間1分以内に応答するDB待ちでタイムアウトする
ウォームアップ完全に起動後のみ200を返す起動途中でも200を返す
依存先重要なDBや外部サービスを確認するアプリプロセスだけを確認してDB障害を見逃す
認証App Service認証または匿名許可の設計ができている独自認証でHealth checkがログイン画面へ飛ばされる
スケール本番は2インスタンス以上か1インスタンスのまま可用性向上を期待する

ヘルスチェック用エンドポイントの設計例

Health checkの品質は、指定するエンドポイントの設計で大きく変わります。トップページを指定するよりも、ヘルスチェック専用のエンドポイントを作るほうが安全です。

たとえば、Web APIであれば次のような判断基準が実用的です。

チェック対象含めるべきか理由
アプリプロセスの起動状態含める最低限の死活確認になる
DB接続多くの場合は含めるDBに接続できないアプリは実質的に利用不能なことが多い
メッセージキュー業務上必須なら含める非同期処理が止まるとサービス品質に影響する
外部決済API慎重に判断外部要因で全インスタンス異常扱いになる可能性がある
重い集計処理含めないHealth check自体が負荷源になる
キャッシュ接続依存度が高ければ含めるRedisなどの停止でアプリが機能しない場合は重要

Microsoftのドキュメントでも、アプリがデータベースやメッセージングシステムに依存している場合、Health checkエンドポイントはそれらの重要コンポーネントに接続し、接続できない場合は500レベルの応答コードを返す例が示されています。また、1分以内に応答しない場合も異常と見なされます。(Microsoft Learn)

実務では、ヘルスチェックを「軽すぎる」または「重すぎる」どちらにも寄せすぎないことが大切です。

軽すぎる例は、常に 200 OK を返すだけのエンドポイントです。この場合、DB障害や依存サービス障害が起きてもApp Serviceは正常と判断し、ユーザーは壊れたインスタンスにアクセスし続ける可能性があります。

重すぎる例は、毎回複雑なSQL、外部API呼び出し、大量データ読み込みを行うエンドポイントです。この場合、Health checkそのものが負荷を増やし、遅延やタイムアウトによって不必要な異常判定を招く可能性があります。

管理者が確認すべきApp Serviceプランとインスタンス数

Health checkの効果を最大化するには、App Serviceプランを2つ以上のインスタンスにスケールアウトする必要があります。1インスタンス構成でも監視には使えますが、異常インスタンスをロードバランサーから外すとアプリ全体が停止するため、ロードバランサーからの除外による可用性向上は得にくくなります。(Microsoft Learn)

FreeやSharedのApp ServiceプランでもHealth checkを有効化してメトリックやアラートを利用できますが、これらのプランではスケールアウトがサポートされないため、異常インスタンスの自動置き換えによるメリットは限定的です。Microsoftは、2インスタンス以上にスケールアウトしてHealth checkの恩恵を受けるにはBasicレベル以上へのスケールアップを案内しています。(Microsoft Learn)

環境推奨判断
開発環境1インスタンスでも監視・検証目的なら利用価値あり
検証環境本番に近いスロット構成・認証設定で確認する
本番小規模サイト少なくとも2インスタンスを検討する
本番高負荷サイト2インスタンス以上に加え、オートスケールやApplication Insightsも併用する
長いウォームアップがあるアプリ最小3インスタンスも検討する

Azure Advisorでも、本番ワークロードではApp Serviceの最小インスタンス数を2にし、ウォームアップ時間が長いアプリでは3インスタンスを推奨する記述があります。(Microsoft Learn)

開発者が実装時に注意すべきポイント

Health check用エンドポイントは、アプリケーションコードの一部として実装する必要があります。単にルートを追加するだけでなく、「どの状態ならユーザーにリクエストを受け付けてよいか」を明確に定義することが重要です。

正常時だけ200を返す

Health checkでは、200〜299のステータスコードが正常と見なされます。逆に、401、403、500、リダイレクト系のステータスコードは異常判定の原因になります。

たとえば、次のような設計が望ましいです。

状態返すステータスコードの考え方
アプリ起動済み、DB接続可能、重要依存先も利用可能200
DBに接続できない500
アプリの初期化中503
メンテナンス中503
認証が必要Health check用パスでは避ける

特に注意したいのは、ログイン画面へのリダイレクトです。Health checkは302リダイレクトに従いません。また、HTTPSリダイレクトを有効にしていても「HTTPS Only」が無効な場合、HTTP 307が原因で Waiting for health check response になる可能性があります。(Microsoft Learn)

認証とセキュリティの注意点

App Serviceの認証・承認機能を利用している場合、Health checkはその機能と統合されるため、追加設定なしで利用できます。一方、独自の認証システムを使っている場合は、Health checkパスで匿名アクセスを許可する必要があります。(Microsoft Learn)

ただし、匿名アクセスを許可するからといって、誰でも内部状態を詳しく見られるエンドポイントにしてはいけません。Health checkエンドポイントは、詳細な環境変数、接続文字列、内部エラー内容、依存サービス名などを返さない設計にします。

セキュリティを高める方法として、MicrosoftのドキュメントではIP制限、クライアント証明書、仮想ネットワークなどでアクセスを制限したうえで、x-ms-auth-internal-token ヘッダーと WEBSITE_AUTH_ENCRYPTION_KEY のSHA256ハッシュを照合する方法が示されています。(Microsoft Learn)

実務では、次のようなレスポンスが扱いやすいです。

{
  "status": "Healthy"
}

避けたい例は次のようなレスポンスです。

{
  "status": "Unhealthy",
  "database": "sql-prod-eastasia-01",
  "connectionString": "Server=...",
  "error": "password authentication failed..."
}

後者は障害調査には便利に見えますが、公開された場合の情報漏えいリスクが高すぎます。詳細な診断情報はApplication Insights、ログ、App Service Diagnosticsに集約し、Health checkエンドポイントは最小限の結果だけを返す設計が安全です。

設定できるアプリ設定

Health checkでは、標準の有効化に加えてアプリ設定で動作を調整できます。代表的な設定は次の2つです。

アプリ設定既定値設定可能な値用途
WEBSITE_HEALTHCHECK_MAXPINGFAILURES102〜10異常と判定するまでの失敗回数
WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT501〜100一度にロードバランサーから除外できる異常インスタンスの割合

WEBSITE_HEALTHCHECK_MAXPINGFAILURES を小さくすると、異常インスタンスを早く切り離せます。ただし、一時的な遅延やウォームアップ中の応答遅れでも切り離しが起きやすくなります。安易に最小値へ下げるのではなく、アプリの起動時間、依存先の応答時間、通常時のレイテンシを見て判断してください。

WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT は、残りの正常インスタンスに負荷が集中しすぎないよう制御するための設定です。既定では、一度にロードバランサーから除外されるインスタンスは半分以下です。たとえば4インスタンス中3インスタンスが異常でも、既定では2インスタンスのみが除外され、残りの2インスタンスは要求を受け続けます。(Microsoft Learn)

デプロイ・移行時の注意点

Health checkの導入は、アプリケーションの可用性を高める一方で、設定ミスがあると本番トラフィックに影響します。特にデプロイや移行のタイミングでは、次の点を確認してください。

設定変更でアプリが再起動する

Health checkの構成変更はアプリの再起動を伴います。業務時間中に直接本番環境で変更すると、短時間でもリクエスト失敗やセッション切断が発生する可能性があります。ステージングスロットで設定・検証し、本番へスワップする流れを基本にしましょう。(Microsoft Learn)

スロットスワップでは設定がスロット固有ではない

Health checkの構成はスロット固有ではありません。スワップ後は、スワップされたスロットのHealth check設定が宛先スロットへ適用されます。ステージングだけ別のパスを指定していると、本番反映後に意図しないパスが使われる可能性があります。(Microsoft Learn)

スロットHealth checkパスリスク
Production/health正常
Staging/staging-healthスワップ後に本番で想定外のパスになる可能性
Production / Staging共通/health予期しない差分を抑えやすい

本番と非本番で完全に同じ依存先をチェックできない場合でも、パス名や返却仕様はできるだけ揃え、内部で環境ごとの依存先を見るように設計すると運用しやすくなります。

ウォームアップと組み合わせて考える

スケールアウト時、App Serviceは新しいインスタンスの準備ができていることを確認するため、Health checkパスにpingを行います。(Microsoft Learn)

そのため、ヘルスチェック用エンドポイントが「起動直後でも200を返す」実装だと、実際にはまだDB接続プールやキャッシュが準備できていない状態でトラフィックを受けてしまう可能性があります。逆に、ウォームアップ後にしか200を返さない設計にすれば、未準備のインスタンスへリクエストが流れるリスクを下げられます。

複数アプリを同じApp Serviceプランで動かしている場合

同じApp Serviceプランに複数のアプリを載せている場合は、Health checkの影響範囲を誤解しやすいです。

Microsoftのドキュメントでは、異常なインスタンスは他のアプリの有無に関係なく、指定割合の範囲でロードバランサーのローテーションから除外されると説明されています。一方で、インスタンスの置き換えについては、Health checkが有効な他のアプリも同じインスタンス上で異常な場合に限られます。Health checkが有効でないアプリは、置き換え判定では考慮されません。(Microsoft Learn)

たとえば、同じApp ServiceプランにアプリAとアプリBがあり、どちらもHealth checkを有効にしているとします。アプリAだけが特定インスタンスで異常になった場合、そのインスタンス上のアプリAへのリクエストは止められます。しかし、アプリBが正常であれば、インスタンス自体の置き換えは行われません。

この仕様は、コスト削減のために複数アプリを同一プランに集約している環境で特に重要です。Health checkを導入する前に、次のように整理してください。

確認項目理由
同じApp Serviceプラン上のアプリ一覧置き換え時の影響範囲を把握するため
各アプリのHealth check有効化状況置き換え判定に含まれるか確認するため
本番アプリと検証アプリの混在有無本番可用性に不要な影響を与えないため
スロットの有無スワップ時の設定差分を防ぐため

監視とアラートの設定

Health checkパスを指定した後は、Azure Monitorでサイトの正常性を監視できます。Azure portalのHealth checkページからメトリックを開くと、Health check statusの履歴を確認し、アラートルールを作成できます。Health check statusメトリックでは、成功したpingが集計され、設定されたしきい値に基づいてインスタンスが異常と見なされたときにエラーとして反映されます。(Microsoft Learn)

本番環境では、少なくとも次の監視を組み合わせると実用的です。

監視項目目的
Health check statusインスタンス単位の異常検知
HTTP 5xxユーザー影響の把握
Response Time劣化の早期検知
CPU / Memoryリソース逼迫の確認
Application Insights例外、依存関係、分散トレースの分析
Activity Log設定変更や再起動操作の追跡

App Service全体の監視方法として、MicrosoftはAzure Monitor、診断設定、Application Insights、ログストリーム、メトリック、クォータとアラート、アクティビティログなどを用途別に使い分けることを説明しています。特にASP.NET Core、ASP.NET、Java、Node.js、PythonではApplication Insightsによる可観測性の有効化も推奨されています。(Microsoft Learn)

障害時の運用手順

Health checkを有効化したら、障害時の手順も決めておく必要があります。Azure portalの「インスタンス」タブでは、Health check有効化後にインスタンス名と状態を確認でき、異常なインスタンスのワーカープロセスを手動で再起動できます。再起動が失敗する場合は、ワーカーの置き換えを行える場合があります。(Microsoft Learn)

ただし、インスタンス置き換えには制限があります。App Serviceプランでは、異常インスタンスの置き換えは1時間あたり最大1つ、1日あたり最大3つまでです。また、スケールユニットごとの総置き換え数にも構成できない制限があります。(Microsoft Learn)

障害時は、次の順で確認すると原因の切り分けがしやすくなります。

| 順序 | 確認内容 | 判断ポイント |
| -: | ——————– | ——————– |
| 1 | Health check status | どのインスタンスが異常か |
| 2 | HTTPステータス | 500系か、リダイレクトか、認証エラーか |
| 3 | Application Insights | 例外、依存先失敗、遅延の有無 |
| 4 | App Serviceメトリック | CPU、メモリ、接続数の逼迫 |
| 5 | デプロイ履歴 | 直近のリリースや設定変更 |
| 6 | 手動再起動 | 特定インスタンスだけの問題か |
| 7 | スケールアウト | 残りインスタンスの負荷増加に対応できるか |

Windowsアプリケーションでは、Health checkタブから診断情報の収集を有効化し、異常インスタンスのメモリダンプをストレージアカウントに保存する構成も可能です。ただし、この設定は自動修復の構成を変更するため、既存のAuto-Healルールがある場合はApp Service Diagnosticsから設定することが推奨されています。(Microsoft Learn)

よくある失敗例と対策

Health checkは強力ですが、設定ミスをすると逆効果になることがあります。実務で特に多い失敗例をまとめます。

失敗例起きる問題対策
トップページをHealth checkに指定キャッシュで200が返り、障害を見逃す専用エンドポイントを作る
ログイン必須のパスを指定401やリダイレクトで異常判定される匿名アクセスまたはApp Service認証統合を使う
カスタムドメインへのリダイレクトがある301で異常扱いになる既定ドメインのパスで200を返す
依存先をすべて厳密に見る外部API障害で全インスタンス異常になる業務影響が大きい依存先に絞る
1インスタンスで本番運用切り離しによる可用性向上が限定的2インスタンス以上を検討
スロット間で設定差があるスワップ後に想定外のHealth checkになるProductionとStagingの設定を揃える
設定変更を本番で直接実施再起動で一時影響が出るステージングスロットで検証する
エンドポイントが重いHealth check自体が負荷になる軽量で短時間に応答する実装にする

管理者・開発者が今すぐ確認すべきこと

Azure App ServiceでHealth checkをすでに使っている場合も、まだ使っていない場合も、次の順番で確認すると無駄がありません。

既存環境の確認

まず、Azure portalで対象App ServiceのHealth checkが有効か、指定パスが何かを確認します。次に、そのパスへアクセスしたときに200〜299を返すか、リダイレクトや認証エラーになっていないかを確認します。

あわせて、App Serviceプランのインスタンス数も確認してください。本番アプリが1インスタンス構成の場合、Health checkの監視価値はありますが、異常インスタンスの切り離しによる可用性向上は限定的です。

アプリ側の実装確認

開発者は、Health checkエンドポイントが次の条件を満たしているかを確認します。

  • アプリが完全にウォームアップした後だけ200を返す
  • 重要なDBやメッセージング基盤に接続できない場合は500系を返す
  • 1分以内に応答する
  • 認証リダイレクトを発生させない
  • 詳細な内部情報をレスポンスに含めない

デプロイ手順の確認

リリース担当者は、Health check設定の変更を本番で直接行わない手順になっているかを確認します。特にステージングスロットを使っている場合は、スワップ後にHealth check設定がどのスロットへ適用されるかを事前に検証してください。

まとめ:Health checkは「設定」ではなく可用性設計として扱う

Azure App ServiceのHealth checkは、異常なインスタンスを検出し、ロードバランサーから外し、必要に応じて置き換えることで、アプリケーションの可用性を高める機能です。導入自体はAzure portalから簡単に行えますが、本番環境で効果を出すには、ヘルスチェックパスの設計、2インスタンス以上のスケール構成、認証・リダイレクト対策、スロットスワップ時の設定整合性が欠かせません。

まず行うべきことは、対象App ServiceでHealth checkが有効か、指定パスが本当にアプリの利用可能性を表しているかを確認することです。そのうえで、Azure MonitorやApplication Insightsのアラートと組み合わせ、障害時に「どのインスタンスが異常で、どこまで自動復旧し、どこから手動対応するのか」を運用手順として整備してください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次