JavaScriptを有効にしてください

Azure VM で Application Health 拡張機能を試し隊

 ·   5 分で読めます  ·   Kento

仮想マシンの 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
異常状態の判別 正常なシグナルを受信しない場合 異常と定義された応答が返ってきた場合
初期化状態 利用不可 利用可能

今回は両方を試してみます

ざっくり手順

  1. Binary Health States 用仮想マシンを作成
  2. IIS をインストール
  3. Application Health 拡張機能(Binary)をインストール
  4. 正常性を確認
  5. Rich Health States 用仮想マシンを作成、IIS をインストール
  6. Application Health 拡張機能(Rich)をインストール
  7. 正常性を確認
  8. VMSS の自動修復を試す

1. Binary Health States 用仮想マシンを作成

仮想マシンを作成します
新しいもの好きなので Windows Server 2025 を選択しました
※VMSS はあとからやり直したので無視してください

image01
deploy VM:

この時点で Application Health を有効化することもできますが、今回は作成後に行います

image02
vm_apphealth:

3. IIS をインストール

作成した仮想マシンに実行コマンドの RunPowerShellScript から IIS をインストールします

1
2
3
4
5
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Set-Location -Path C:\inetpub\wwwroot
Add-Content iisstart.htm "<H1><center>WELCOME to my Web Server 
$env:COMPUTERNAME, Azure Network Rocks!!!!!!!</center></H1>"
Invoke-Command -ScriptBlock { iisreset }
image03
install ISS:

ブラウザで仮想マシンのパブリック IP にアクセスして IIS の画面が表示されることを確認します

image04
IIS:

4. Application Health 拡張機能(Binary)をインストール

仮想マシンの [正常性の監視] から Application Health 拡張機能を追加します
特に変更することなくデフォルトのままで有効化しました

image05
add extension:

5. 正常性を確認

仮想マシンの概要ページを確認すると [正常性の状態] が正常になっていることが確認できました

image06
health status:

では、IIS を停止させるとどうなるか確認します
実行コマンドから下記のコマンドを実行します

1
Stop-Service -Name W3SVC
image07
stop IIS:

ブラウザから IIS の画面にアクセスすると、サイトにアクセスできないことが確認できました

image08
IIS stop:

仮想マシンの概要ページを見ると [正常性の状態] が異常になっていることが確認できました

image09
health status:

6. Rich Health States 用仮想マシンを作成、IIS をインストール

Binary Health States 用の仮想マシンと同様に作成します
作成後、IIS をインストールします
手順は省略しますが、正しくブラウザからアクセスできました

7. Application Health 拡張機能(Rich)をインストール

Binary Health States 用の仮想マシンと同様に Application Health 拡張機能を追加します
今回は Rich Health States を選択しました
猶予期間だけ 60 に変更しています
この猶予期間は仮想マシンが立ちあがった直後など、正常性の判定を待つ時間を指定できます

image10
add extension:

8. 正常性を確認

仮想マシンの概要ページを確認すると [正常性の状態] が不明になっていることが確認できました
これは想定どおりです
Rich Health States は応答本文付きの HTTP/HTTPS を利用します
詳細は アプリケーションの正常性拡張機能と Azure 仮想マシンを使用する - Azure Virtual Machines | Microsoft Learn を確認してほしいですが、正常と判断するには プローブ応答コード: 状態 2xx、プローブ応答本文: {“ApplicationHealthState”: “Healthy”} が必要です
今回は設定をしていないため、正常性の状態が不明になっています

image11
health status:

猶予期間の 60秒の間は [初期化中] というステータスになってほしかったのですが、Azure Portal からは確認できなかったので仮想マシンにログインしてログを確認します
Windows の場合は C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\ にログが出力されます

少し文字が小さくて見づらいですが、下記のようなログが出力されていました

image18
log:

赤色でハイライトした部分が猶予期間の開始と終了です
参考までに抜粋しておきます

[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)を追加します

image12
vmss:

Application Health 拡張機能を有効化した後、自動修復をオンにしておきます
今回は猶予期間を 10 分に設定し、再起動にしておきました

image13
vmss:

VMSS の全体設定を変更したのでインスタンスをアップデートして設定を反映させておきます

image14
vmss:

1つのインスタンスの IIS を停止させてみます
停止すると正常性の状態は異常になりましたが、10分ほど経過すると自動修復が実行され、正常性の状態が復旧しました
アクティビティ ログを見ると、実行コマンドで IIS を停止させた 約 10 分後に自動修復が実行されていることが確認できました
赤色:実行コマンド(IIS 停止)
青色:自動修復

image16
vmss:

おまけ

VMSS の均一オーケストレーションでは [インスタンス] ビューから正常性の状態を確認することができます

image15
vmss 均一オーケストレーション:

しかし、フレキシブル オーケストレーションでは [インスタンス] ビューで正常性の状態を確認することができません
列が非表示なだけかと思いましたが、存在していませんでした

image17
vmss フレキシブルオーケストレーション:

まとめ

仮想マシンの Application Health 拡張機能を使って、アプリケーションの正常性を監視することができました
VMSS と組み合わせることで、自動修復を実行することができ運用の自動化に役立ちそうです!

フレキシブル オーケストレーションでも [インスタンス] ビューで正常性の状態を確認できると嬉しいなーと思いました

参考

共有

Kento
著者
Kento
2020年に新卒で IT 企業に入社. インフラエンジニア(主にクラウド)として活動中