仮想マシンの Application Health (アプリの正常性) 拡張機能を使うと仮想マシンで実行されているアプリケーションを監視することができます
その結果、仮想マシン スケールセットの自動インスタンス修復を利用し、修復を実行することができたりします
詳しくは以下のリンクを参照してください
Azure Virtual Machine Scale Sets でアプリケーションの正常性拡張機能を使用する - Azure Virtual Machine Scale Sets | Microsoft Learn
2種類の Application Health 拡張機能
Applicaiton Healthe 拡張機能には Binary Health States と Rich Health States の2種類あります
公開情報を抜粋します
特徴 | Binary Health States | Rich Health States |
---|---|---|
正常性シグナル | HTTP/HTTPS または TCP | 応答本文付きの HTTP/HTTPS または TCP |
異常状態の判別 | 正常なシグナルを受信しない場合 | 異常と定義された応答が返ってきた場合 |
初期化状態 | 利用不可 | 利用可能 |
今回は両方を試してみます
ざっくり手順
- Binary Health States 用仮想マシンを作成
- IIS をインストール
- Application Health 拡張機能(Binary)をインストール
- 正常性を確認
- Rich Health States 用仮想マシンを作成、IIS をインストール
- Application Health 拡張機能(Rich)をインストール
- 正常性を確認
- VMSS の自動修復を試す
1. Binary Health States 用仮想マシンを作成
仮想マシンを作成します
新しいもの好きなので Windows Server 2025 を選択しました
※VMSS はあとからやり直したので無視してください
この時点で Application Health を有効化することもできますが、今回は作成後に行います
3. IIS をインストール
作成した仮想マシンに実行コマンドの RunPowerShellScript から IIS をインストールします
|
|

ブラウザで仮想マシンのパブリック IP にアクセスして IIS の画面が表示されることを確認します
4. Application Health 拡張機能(Binary)をインストール
仮想マシンの [正常性の監視] から Application Health 拡張機能を追加します
特に変更することなくデフォルトのままで有効化しました
5. 正常性を確認
仮想マシンの概要ページを確認すると [正常性の状態] が正常になっていることが確認できました
では、IIS を停止させるとどうなるか確認します
実行コマンドから下記のコマンドを実行します
|
|

ブラウザから IIS の画面にアクセスすると、サイトにアクセスできないことが確認できました
仮想マシンの概要ページを見ると [正常性の状態] が異常になっていることが確認できました
6. Rich Health States 用仮想マシンを作成、IIS をインストール
Binary Health States 用の仮想マシンと同様に作成します
作成後、IIS をインストールします
手順は省略しますが、正しくブラウザからアクセスできました
7. Application Health 拡張機能(Rich)をインストール
Binary Health States 用の仮想マシンと同様に Application Health 拡張機能を追加します
今回は Rich Health States を選択しました
猶予期間だけ 60 に変更しています
この猶予期間は仮想マシンが立ちあがった直後など、正常性の判定を待つ時間を指定できます
8. 正常性を確認
仮想マシンの概要ページを確認すると [正常性の状態] が不明になっていることが確認できました
これは想定どおりです
Rich Health States は応答本文付きの HTTP/HTTPS を利用します
詳細は アプリケーションの正常性拡張機能と Azure 仮想マシンを使用する - Azure Virtual Machines | Microsoft Learn を確認してほしいですが、正常と判断するには プローブ応答コード: 状態 2xx、プローブ応答本文: {“ApplicationHealthState”: “Healthy”} が必要です
今回は設定をしていないため、正常性の状態が不明になっています

猶予期間の 60秒の間は [初期化中] というステータスになってほしかったのですが、Azure Portal からは確認できなかったので仮想マシンにログインしてログを確認します
Windows の場合は C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
にログが出力されます
少し文字が小さくて見づらいですが、下記のようなログが出力されていました
赤色でハイライトした部分が猶予期間の開始と終了です
参考までに抜粋しておきます
[5040+00000001] [12/03/2024 00:49:47.68] [INFO] Honoring grace period. Time elapsed = 00:00:00.38
(省略)
[5040+00000001] [12/03/2024 00:50:47.40] [INFO] No longer honoring grace period - expired. Time elapsed = 00:01:00.10
緑色でハイライトした部分は正常性状態の変化です
参考までに抜粋しておきます
[5040+00000001] [12/03/2024 00:49:47.68] [INFO] Committed health state is initializing.
(省略)
[5040+00000001] [12/03/2024 00:50:47.40] [INFO] Committed health state is unknown.
Azure Portal からは確認できなかったので、ログを確認することで猶予期間の開始と終了、正常性状態の変化を確認できました
9. VMSS の自動修復を試す
仮想マシン スケールセットの自動修復を試したいので、Windows の仮想マシン スケールセットを作成します
作成したインスタンスに IIS をインストールし、Application Health 拡張機能(Binary)を追加します
Application Health 拡張機能を有効化した後、自動修復をオンにしておきます
今回は猶予期間を 10 分に設定し、再起動にしておきました
VMSS の全体設定を変更したのでインスタンスをアップデートして設定を反映させておきます
1つのインスタンスの IIS を停止させてみます
停止すると正常性の状態は異常になりましたが、10分ほど経過すると自動修復が実行され、正常性の状態が復旧しました
アクティビティ ログを見ると、実行コマンドで IIS を停止させた 約 10 分後に自動修復が実行されていることが確認できました
赤色:実行コマンド(IIS 停止)
青色:自動修復
おまけ
VMSS の均一オーケストレーションでは [インスタンス] ビューから正常性の状態を確認することができます
しかし、フレキシブル オーケストレーションでは [インスタンス] ビューで正常性の状態を確認することができません
列が非表示なだけかと思いましたが、存在していませんでした
まとめ
仮想マシンの Application Health 拡張機能を使って、アプリケーションの正常性を監視することができました
VMSS と組み合わせることで、自動修復を実行することができ運用の自動化に役立ちそうです!
フレキシブル オーケストレーションでも [インスタンス] ビューで正常性の状態を確認できると嬉しいなーと思いました