Azure Application Gatewayのバックエンド正常性確認方法と監視設定手順

2020-05-03Application Gateway,Azure,Monitor

Azure Application Gatewayのバックエンド正常性の確認方法と、Azure Monitorを使った監視アラートの設定方法についてまとめました。

Azure Application Gatewayは、Webアクセスを受け付けてバックエンドサーバーへトラフィックを分散する、L7(アプリケーション層)で動作するロードバランサー(負荷分散装置)です。

Azure Application Gateway とは

Application Gatewayは、バックエンド(振り分け先)のホスト(サーバー)の状態をヘルスプローブ(正常性を確認する仕組み)によって定期的に監視し、正常と判断されたホストのみに通信を振り分けます。
このバックエンドの正常性はAzure Portal上から確認することができます。
また、正常なホストの数を示すHealthy Host Countや、異常なホストの数を示すUnhealthy Host Countといったメトリックでも把握できます。

Application Gateway – バックエンドの正常性

Webサービスを安定して稼働させるためには、このバックエンドの正常性を監視しておくことが重要になります。

今回は、Azure Application Gatewayのバックエンド正常性をAzure Portal、Azure CLI、Azure PowerShellで確認する方法と、Azure Monitorを使った監視アラートの設定方法をまとめました。

※本記事では、一部を除きAzure Application Gatewayとして表記しています。メニュー上の表記でアプリケーションゲートウェイとある場合は、メニュー表記に合わせて表記しています。

スポンサーリンク

Azure Application Gatewayのバックエンド正常性を確認する方法

今回利用した環境

今回利用したApplication Gatewayの設定内容です。
バックエンドターゲットとしてIISをインストールした仮想マシンを2台配置しています。

Application Gatewayの設定値
名前 agw-01
レベル Standard V2
バックエンドプール名 backend-pool-01
バックエンドターゲット Webサーバー(仮想マシン)2台
バックエンド設定名 backend-01
バックエンドプロトコル HTTP
バックエンドポート 80

※カスタムプローブなどは使用していません。

Azure Portalでバックエンド正常性を確認

監視にバックエンド正常性のメニューが用意されています。

Azure Portalでバックエンド正常性を確認
ホスト(サーバー)単位でバックエンドの正常性を確認できます。
異常が発生した場合はエラー内容が表示されます。
バックエンドポートなどの情報も表示されるため、同じホスト(サーバー)で異なるポートを指定している場合でも、それぞれの状態を確認できます。

【正常時】

バックエンド正常性を表示例(正常時)(Application Gatewayのバックエンド正常性確認方法)

【異常時】

バックエンド正常性を表示例(異常時)(Application Gatewayのバックエンド正常性確認方法)

メトリックでバックエンド正常性を確認

メトリックとは、Azure Monitorが収集する、Azureリソースの稼働状況を数値で可視化する機能です。
バックエンド正常性に関連するメトリックとして、正常なホストの数(Healthy Host Count)と異常なホストの数(Unhealthy Host Count)があります。
それぞれ、バックエンドプール内にあるホストの状態(正常/異常)ごとの台数を示しています。

バックエンド メトリック

メトリックでバックエンド正常性を確認
正常なホストの数(Healthy Host Count)の例です。
途中で正常なホストの数が2から1に減少していることが確認できます。
Healthy Host Countのメトリック表示例(Application Gatewayのバックエンド正常性確認方法)

異常なホストの数(Unhealthy Host Count)の例です。
途中で異常なホストの数が0から1に増加したことが確認できます。

Unhealthy Host Countのメトリック表示例(Application Gatewayのバックエンド正常性確認方法)

※Azure Portalの画面例は、バックエンドのサーバー2台のうち1台が異常になった場合です。

Azure PowerShellでバックエンド正常性を確認

Azure PowerShellでバックエンド正常性を確認する場合は、Get-AzApplicationGatewayBackendHealthコマンドレットを使用します。

Get-AzApplicationGatewayBackendHealth

Azure PowerShellでバックエンド正常性を確認

# すべてのバックエンド正常性を表示
PS C:\> $rgname = “アプリケーションゲートウェイのリソースグループ名"
PS C:\> $agwname = “アプリケーションゲートウェイ名"
PS C:\>
Get-AzApplicationGatewayBackendHealth -Name $agwname -ResourceGroupName $rgname `
| Select-Object -ExpandProperty BackendAddressPools `
| Select-Object -ExpandProperty BackendHttpSettingsCollection `
| Select-Object -ExpandProperty Servers `
| Select-Object Address, Health

Address Health
——- ——
10.1.100.4 Healthy
10.1.100.5 Unhealthy

# バックエンド正常性で異常なホスト(サーバー)のみを表示
PS C:\> $rgname = “アプリケーションゲートウェイのリソースグループ名"
PS C:\> $agwname = “アプリケーションゲートウェイ名"
PS C:\>
Get-AzApplicationGatewayBackendHealth -Name $agwname -ResourceGroupName $rgname `
| Select-Object -ExpandProperty BackendAddressPools `
| Select-Object -ExpandProperty BackendHttpSettingsCollection `
| Select-Object -ExpandProperty Servers `
| Where-Object { $_.Health -eq “Unhealthy" } `
| Select-Object Address, Health

Address Health
——- ——
10.1.100.5 Unhealthy

※PowerShell 7.6.0、Az Module 15.4.0、Az.Network 7.25.1の環境で確認してます。

Azure CLIでバックエンド正常性を確認

Azure CLIでバックエンド正常性を確認する場合は、az network application-gateway show-backend-healthコマンドを使用します。

az network application-gateway show-backend-health

Azure CLIでバックエンド正常性を確認

# すべてのバックエンド正常性を表示
PS C:\>
$rgname = “アプリケーションゲートウェイのリソースグループ名"

PS C:\> $agwname = “アプリケーションゲートウェイ名"
PS C:\> $query = “backendAddressPools[].backendHttpSettingsCollection[].servers[].{Address:address, Health:health, HealthProbeLog:healthProbeLog}"
PS C:\> az network application-gateway show-backend-health -g $rgname -n $agwname –query  $query –output table

Address Health HealthProbeLog
———- ——— ———
10.1.100.4 Healthy Success. Received 200 status code
10.1.100.5 Unhealthy Time taken by the backend to respond to application gateway’s health probe ~(以下略)~

# バックエンド正常性で異常なホスト(サーバー)のみを表示
PS C:\>
$rgname = “アプリケーションゲートウェイのリソースグループ名"

PS C:\> $agwname = “アプリケーションゲートウェイ名"
PS C:\> $query = “backendAddressPools[].backendHttpSettingsCollection[].servers[] | [?health==’Unhealthy’].{Address:address, Health:health, HealthProbeLog:healthProbeLog}"
PS C:\> az network application-gateway show-backend-health -g $rgname -n $agwname –query  $query –output table

Address Health HealthProbeLog
———- ——— ———
10.1.100.5 Unhealthy Time taken by the backend to respond to application gateway’s health probe ~(以下略)~

※Azure CLIは、2.84.0の環境で確認してます。

—広告—

Application Gatewayのバックエンド正常性を監視するアラートルールをAzure Monitorで作成

Azure Monitorのアラートルールを使うと、メトリックの値が指定した条件に該当した場合にメール通知などのアクションを自動実行できます。
ここでは、バックエンドの正常性を監視するアラートルールを作成します。

アラートルールの設定値

今回設定したアラートルールの設定値です。
異常なホストの数(Unhealthy Host Count)と正常なホストの数(Healthy Host Count)を、それぞれ監視するアラートルールを作成しています。
ディメンションを設定することで、バックエンドプール(バックエンド設定)単位での検知ができるようになります。

なお、今回の設定は検証用です。
バックエンドの正常性が一度でもエラーになった場合にアラート扱いとなり、5分間正常な状態が継続した場合に復旧となります。
実際の運用環境で利用する場合は、これらの値を適切に調整してください。

アラートルールの設定値
異常なホストの数(Unhealthy Host Count)を監視するアラートルール
 アラート ルール名 AGW Unhealthy Host Count
 シグナル名 Uhealthy Host Count
 しきい値の種類 Static
 集計の種類 平均
 値 次の値より大きい
 しきい値 0
 ディメンション BackendPool HttpSettings
(ディメンション値 : backend-pool-01~backend-01)
 確認する間隔 1分
 ルックバック期間 5分
正常なホストの数(Healthy Host Count)を監視するアラートルール
 アラート ルール名 AGW Healthy Host Count
 シグナル名 Healthy Host Count
 しきい値の種類 Static
 集計の種類 平均
 値 次の値より小さい
 しきい値 2
 ディメンション BackendPool HttpSettings
(ディメンション値 : backend-pool-01~backend-01)
 確認する間隔 1分
 ルックバック期間 5分

また、このようなしきい値設定も可能です。
このようなしきい値のアラートルールを併用することで、バックエンドプールに設定したサーバーで1台でも異常が発生した場合と、すべてが停止した場合の両方を検知できます。

    • 異常なホストの数(Unhealthy Host Count)を監視
      • アラートルール名:AGW Unhealthy Host Count
      • 条件:Unhealthy Host Countの値が5分平均で0より大きい場合
    • 正常なホストの数(Healthy Host Count)を監視
      • アラートルール名:AGW Healthy Host Count
      • 条件:Healthy Host Countの値が5分平均で1より小さい場合
アラートルール名 異常なサーバーの数
0台 1台 2台
AGW Unhealthy Host Count ×
AGW Healthy Host Count × ×

※監視間隔(確認する間隔、ルックバック期間)なども調整可能です。

異常なホストの数(Unhealthy Host Count)を監視するアラートルールを作成

異常なホストの数(Unhealthy Host Count)を監視するアラートルールを作成します。
Unhealthy Host Countのメトリックを監視することで、バックエンドのサーバーで異常が発生したことを検知できます。
今回は、サーバー1台以上に異常が発生した場合にアラートを検知するように設定しています。

アラートルールを作成
監視にある警告を選択します。
作成にあるアラートルールを選択します。
アラートルールの作成を開始(Application Gatewayのバックエンド正常性監視方法)
条件の設定画面が表示されます。
すべてのシグナルを表示を選択します。
シグナルの選択でUnhealthy Host Countを選択します。
アラートルールでUnhealthyHostCountのシグナルを選択(Application Gatewayのバックエンド正常性監視方法)
シグナル名にUnhealthy Host Countが選択されているのが確認できます。
演算子を次の値より大きいに設定し、しきい値を0に設定します。
UnhealthyHostCountのアラートロジック設定例(Application Gatewayのバックエンド正常性監視方法)

ディメンションの分割では、BackendPool HttpSettingsを選択します。
確認する間隔とルックバック期間は、デフォルトのままとしています。
次へを選択します。

アラートロジックのディメンション設定例(Application Gatewayのバックエンド正常性監視方法)

アクションの設定画面が表示されます。
アクショングループの使用を選択します。
アクショングループの管理で、設定するアクショングループを選択します。
今回は、事前に作成しておいたメール送信用のアクショングループを選択しています。

アラートルールのアクション設定画面例(Application Gatewayのバックエンド正常性監視方法)

詳細の設定画面です。
アラートルール名や重要度を設定します。
アラートルール名はAGW Unhealthy Host Countとしています。
確認および作成を選択します。

※タグの設定は割愛しています。

アラートルール名の設定画面例(Application Gatewayのバックエンド正常性監視方法)

確認画面が表示されます。
内容を確認し、作成を選択します。

アラートルール作成時の確認画面例(Application Gatewayのバックエンド正常性監視方法)

正常なホストの数(Healthy Host Count)を監視するアラートルールを作成

正常なホストの数を監視することで、バックエンドのサーバーが一定数を下回った場合(全台停止など)に異常が発生したことを検知できます。
今回は、正常なサーバーがなくなった場合(平均が1を下回った場合)にアラートを検知するように設定しています。

アラートルールを作成
監視にある警告を選択します。
作成にあるアラートルールを選択します。
アラートルールの作成を開始(Application Gatewayのバックエンド正常性監視方法)
条件の設定画面が表示されます。
すべてのシグナルを表示を選択します。
シグナルの選択でHealthy Host Countを選択します。
アラートルールでHealthyHostCountのシグナルを選択(Application Gatewayのバックエンド正常性監視方法)
シグナル名にHealthy Host Countが選択されているのが確認できます。
演算子を次の値より小さいに設定し、しきい値を2に設定します。
HealthyHostCountのアラートロジック設定例(Application Gatewayのバックエンド正常性監視方法)

ディメンションの分割では、BackendPool HttpSettingsを選択します。
確認する間隔とルックバック期間は、デフォルトのままとしています。
次へを選択します。

アラートロジックのディメンション設定例(Application Gatewayのバックエンド正常性監視方法)

アクションの設定画面が表示されます。
アクショングループの使用を選択します。
アクショングループの管理で、設定するアクショングループを選択します。
今回は、事前に作成しておいたメール送信用のアクショングループを選択しています。

アラートルールのアクション設定画面例(Application Gatewayのバックエンド正常性監視方法)

詳細の設定画面です。
アラートルール名や重要度を設定します。
アラートルール名はAGW Healthy Host Countとしています。
確認および作成を選択します。

※タグの設定は割愛しています。

アラートルール名の設定画面例(Application Gatewayのバックエンド正常性監視方法)

作成したアラートルールを確認

作成したアラートルールを確認します。

アラートルールを確認
アラートルールが2つ作成されていることを確認できます。 アラートルールの一覧表示画面例(Application Gatewayのバックエンド正常性監視方法)

バックエンド正常性のアラート検知を確認

作成したアラートルールで、バックエンド正常性のアラートが検知されるかを確認します。
今回は、バックエンドプールに設定したサーバー1台のWebサービスを停止させて、アラートを発生させています。

アラート検知の例
両方のアラートルールで、アラート検知されていることが確認できます。 バックエンド正常性のアラート検知例(Application Gatewayのバックエンド正常性監視方法)
Healthy Host Countのアラートメール例です。
5分間の平均で2より小さくなっていることが、メール本文から確認できます。
アラート通知メール例(Healthy Host Countの場合)(Application Gatewayのバックエンド正常性監視方法)
アラート通知メール例(Healthy Host Countの場合)(Application Gatewayのバックエンド正常性監視方法)
Unhealthy Host Countのアラートメール例です。
5分間の平均で1より大きくなっていることが、メール本文から確認できます。
アラート通知メール例(Unhealthy Host Countの場合)(Application Gatewayのバックエンド正常性監視方法)
アラート通知メール例(Unhealthy Host Countの場合)(Application Gatewayのバックエンド正常性監視方法)

—広告—

最後に

今回は、Azure Application Gatewayのバックエンド正常性の確認方法から、Azure Monitorによる監視設定までをまとめてみました。
バックエンドの正常性は、Azure PortalやAzure PowerShell、Azure CLIなどで確認できることが分かりました。
正常なホストの数(Healthy Host Count)や異常なホストの数(Unhealthy Host Count)といったメトリックでも確認できました。
これらのメトリックを活用することで、バックエンドの正常性の変化やサービス停止をAzure Monitorで監視、検知することができました。

引き続き、いろいろ試してみたいと思います。

Azure Front Doorのバックエンド正常性監視については、こちらで紹介しています。

Azure Application Gatewayの構築手順については、こちらで紹介しています。

Azure Application Gatewayのカスタムエラーページ設定手順については、こちらで紹介しています。

Azure Application Gatewayのパスベースルーティング規則を使ったサーバー振り分け設定については、こちらで紹介しています。

今回、バックエンドのWebサーバーにはIISをインストールした仮想マシンを利用しています。
こちらの手順でインストールを実施しています。

スポンサーリンク