搭配虛擬機器擴展集使用應用程式健康狀態延伸模組

監視應用程式健康狀態是用於管理及升級部署的重要訊號。 Azure 虛擬機器擴展集支援包括自動 OS 映像升級自動 VM 來賓修補輪流升級,這些升級仰賴個別執行個體的健康狀態監視來升級您的部署。 您也可以使用應用程式健康狀態延伸模組來監視擴展集中每個執行個體的應用程式健康情況,並使用自動執行個體修復來執行執行個體修復。

本文描述如何使用兩種類型的應用程式健康狀態延伸模組 (二進位健全狀態豐富健全狀態),以監視虛擬機器擴展集上所部署應用程式的健康狀態。

必要條件

本文假設您已熟悉以下各項:

警告

應用程式健康情況擴充功能應在設定的連接埠 tcp 或要求路徑 http/https 收到一致的探查回應,才能將 VM 標記為良好。 如果 VM 上未執行任何應用程式,或您無法設定探查回應,VM 將會顯示為狀況不良 (二進位健全狀態) 或未知 (豐富健全狀態)。

注意

只有一個狀況監控來源可用於虛擬機器擴展集,也就是應用程式健康情況擴充功能或健全狀態探查。 如果您已啟用這兩個選項,您必須先移除一個選項,才能使用執行個體修復或自動 OS 升級等協調流程服務。

使用應用程式健康狀態延伸模組的時機

應用程式健康狀態延伸模組會部署在虛擬機器擴展集執行個體內部,並從擴展集執行個體內部報告應用程式健康狀態。 此擴充功能在本機應用程式端點上進行探查,並將根據從應用程式接收的 TCP/HTTP(S) 回應更新健全狀態。 Azure 會使用此健全狀態來起始狀況不良執行個體的修復,並判斷執行個體是否符合升級作業的資格。

此擴充功能是從 VM 內報告健康情況,在無法使用 Azure Load Balancer 探查等外部探查的情況下,可以使用此擴充功能。

二進位與豐富健全狀態

應用程式健康狀態延伸模組有兩個選項可用:二進位健全狀態豐富健全狀態。 下表強調這兩個選項之間的一些主要差異。 如需一般建議,請參閱本節結尾。

功能 二進位健全狀態 豐富健全狀態
可用的健全狀態 兩個可用的狀態:良好狀況不良 四個可用的狀態:良好狀況不良正在初始化未知1
傳送健康情況訊號 健康情況訊號是透過 HTTP/HTTPS 回應碼或 TCP 連線傳送。 HTTP/HTTPS 通訊協定上的健康情況訊號會透過探查回應碼和回應本文傳送。 透過 TCP 通訊協定傳輸的通訊協定在二進位健全狀態中保持不變。
識別狀況不良的執行個體 如果未從應用程式收到良好訊號,執行個體會自動進入狀況不良狀態。 狀況不良執行個體可以指出擴充功能設定的問題 (例如,無法連線的端點) 或應用程式的問題 (例如,非 200 狀態代碼)。 如果應用程式發出狀況不良探查回應,執行個體只會進入狀況不良狀態。 使用者負責實作自訂邏輯,以識別及標記具有狀況不良應用程式2的執行個體。 延伸模組設定不正確 (例如無法連線的端點) 或健全狀態探查回應無效的執行個體,會處於未知狀態2
新建立的執行個體的正在初始化狀態 無法使用正在初始化狀態。 新建立的執行個體可能需要一些時間,才能進入穩定狀態。 正在初始化狀態可讓新建立的執行個體在符合輪流升級或執行個體修復作業的資格之前進入穩定的健全狀態。
HTTP/HTTPS 通訊協定 支援 支援
TCP 通訊協定 支援 有限的支援 – TCP 通訊協定上無法使用未知狀態。 若要深入了解 TCP 上的健全狀態行為,請參閱豐富健全狀態通訊協定資料表

1 TCP 通訊協定上無法使用未知狀態。 2 僅適用於 HTTP/HTTPS 通訊協定。 TCP 通訊協定會遵循識別狀況不良執行個體的相同流程,如同二進位健全狀態。

一般而言,在下列情況,您應該使用二進位健全狀態

  • 您不想要設定自訂邏輯來識別及標記狀況不良的執行個體
  • 針對新建立的執行個體,您不需要正在初始化寬限期

在下列情況,您應該使用豐富健全狀態

  • 您可以透過 HTTP/HTTPS 通訊協定傳送健康情況訊號,並可透過探查回應本文提交健康情況資訊
  • 您想要使用自訂邏輯來識別及標記狀況不良的執行個體
  • 您可以為新建立的執行個體設定正在初始化寬限期,以便在執行個體符合輪流升級或執行個體修復資格之前進入穩定的健全狀態

二進位健全狀態

二進位健全狀態報告包含兩個健全狀態:良好狀況不良。 下表提供如何設定健全狀態的簡短描述。

HTTP/HTTPS 通訊協定

通訊協定 健全狀態 描述
http/https Healthy 若要傳送良好訊號,應用程式應傳回 200 回應碼。
http/https Unhealthy 如果未從應用程式收到 200 回應碼,執行個體將會標示為狀況不良

TCP 通訊協定

通訊協定 健全狀態 描述
TCP Healthy 若要傳送良好訊號,您必須對提供的應用程式端點進行成功的交握。
TCP Unhealthy 如果與提供的應用程式端點發生失敗或不完整的交握,執行個體將會標示為 狀況不良

某些可能導致狀況不良狀態的案例包括:

  • 當應用程式端點傳回非 200 狀態代碼時
  • 當虛擬機器執行個體內並未設定應用程式端點來提供應用程式健全狀態時
  • 當應用程式端點設定不正確時
  • 當無法觸達應用程式端點時

豐富健全狀態

豐富健全狀態報告包含四個健全狀態:正在初始化良好狀況不良,以及未知。 下表提供如何設定每個健全狀態的簡短描述。

HTTP/HTTPS 通訊協定

通訊協定 健全狀態 描述
http/https Healthy 若要傳送良好訊號,應用程式應傳回探查回應:探查回應碼:狀態 2xx,探查回應本文{"ApplicationHealthState": "Healthy"}
http/https Unhealthy 若要傳送狀況不良訊號,應用程式應傳回探查回應:探查回應碼:狀態 2xx,探查回應本文{"ApplicationHealthState": "Unhealthy"}
http/https 正在初始化 執行個體會在延伸模組開始時間自動輸入正在初始化狀態。 如需詳細資訊,請參閱正在初始化狀態
http/https 未知 未知狀態可能會在下列案例中發生:當應用程式傳回非 2xx 狀態代碼時、當探查要求逾時、當應用程式端點無法連線或設定不正確時、當回應本文中為 ApplicationHealthState 提供遺漏或無效的值時,或寬限期到期時。 如需詳細資訊,請參閱未知狀態

TCP 通訊協定

通訊協定 健全狀態 描述
TCP Healthy 若要傳送良好訊號,您必須對提供的應用程式端點進行成功的交握。
TCP Unhealthy 如果與提供的應用程式端點發生失敗或不完整的交握,執行個體將會標示為 狀況不良
TCP 正在初始化 執行個體會在延伸模組開始時間自動輸入正在初始化狀態。 如需詳細資訊,請參閱正在初始化狀態

正在初始化狀態

此狀態僅適用於豐富健全狀態。 正在初始化狀態只會在延伸模組開始時間發生一次,而且可由延伸模組設定 gracePeriodnumberOfProbes 進行設定。

在延伸模組啟動時,應用程式健康情況會維持在正在初始化狀態,直到發生以下兩個案例之一:

  • 透過 numberOfProbes 設定時連續多次報告相同的健全狀態良好狀況不良
  • gracePeriod 過期

如果連續報告相同的健全狀態良好狀況不良則應用程式健康情況將從正在初始化狀態轉換為報告的健全狀態良好狀況不良

範例

如果 numberOfProbes = 3,這表示:

  • 若要從正在初始化轉換為良好狀態:應用程式健康情況延伸模組必須透過 HTTP/HTTPS 或 TCP 通訊協定接收三個連續的良好訊號
  • 若要從正在初始化轉換為狀況不良狀態:應用程式健康情況延伸模組必須透過 HTTP/HTTPS 或 TCP 通訊協定接收三個連續的狀況不良訊號

如果 gracePeriod 在應用程式回報連續健全狀態之前過期,執行個體健康情況將依下列方式決定:

  • HTTP/HTTPS 通訊協定:應用程式健康情況將從正在初始化轉換成未知
  • TCP 通訊協定:應用程式健康情況將從正在初始化轉換成狀況不良

未知狀態

此狀態僅適用於豐富健全狀態。 未知狀態只會針對「http」或「https」探查報告,且發生在下列案例中:

  • 當應用程式傳回非 2xx 狀態代碼時
  • 當探查要求逾時
  • 當應用程式端點無法連線或設定不正確時
  • 當回應本文中為 ApplicationHealthState 提供遺漏或無效的值時
  • 當寬限期過期時

處於未知狀態的執行個體的處理方式與狀況不良的執行個體類似。 如果啟用,執行個體修復將會在未知執行個體上執行,而輪流升級將會暫停,直到執行個體回復為良好狀態為止。

下表顯示輪流升級執行個體修復的健全狀態解讀:

健全狀態 輪流升級解讀 執行個體修復觸發
正在初始化 等候狀態處於良好狀況不良未知 No
Healthy Healthy No
Unhealthy Unhealthy Yes
未知 Unhealthy Yes

二進位健全狀態的延伸模組結構描述

下列 JSON 會顯示應用程式健康狀態延伸模組的結構描述。 此延伸模組最少需要分別具有相關聯連接埠和要求路徑的 "tcp"、"http" 或 "https" 要求。

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "1.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1
          }
        }
      }
    ]
  }
} 

屬性值

名稱 值 / 範例 資料類型
apiVersion 2018-10-01 date
publisher Microsoft.ManagedServices string
type ApplicationHealthLinux (Linux),ApplicationHealthWindows (Windows) string
typeHandlerVersion 1.0 string

設定

名稱 值 / 範例 資料類型
protocol httphttpstcp string
port 通訊協定是 httphttps 時為選擇性項目;通訊協定是 tcp 時則為必要項目 int
requestPath 通訊協定是 httphttps 時為必要項目;通訊協定是 tcp 時則不允許使用 string
intervalInSeconds (選擇性) 預設值為 5 秒。 這是每個健全狀態探查之間的間隔。 例如,如果 intervalInSeconds == 5,探查會每隔 5 秒傳送一次至本機應用程式端點。 int
numberOfProbes (選擇性) 預設值為 1。 這是變更健全狀態所需的連續探查數目。 例如,如果 numberOfProbles == 3,您需要 3 個連續的「良好」訊號,將健全狀態從「狀況不良」變更為「良好」狀態。 相同的需求適用於將健全狀態變更為「狀況不良」狀態。 int

豐富健全狀態的延伸模組結構描述

下列 JSON 會顯示豐富健全狀態延伸模組的結構描述。 此延伸模組最少需要分別具有相關聯連接埠和要求路徑的 "http" 或 "https" 要求。 也支援 TCP 探查,但無法透過探查回應本文設定 ApplicationHealthState ,而且無法存取未知狀態。

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "2.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1,
            "gracePeriod": 600
          }
        }
      }
    ]
  }
} 

屬性值

名稱 值 / 範例 資料類型
apiVersion 2018-10-01 date
publisher Microsoft.ManagedServices string
type ApplicationHealthLinux (Linux),ApplicationHealthWindows (Windows) string
typeHandlerVersion 2.0 string

設定

名稱 值 / 範例 資料類型
protocol httphttpstcp string
port 通訊協定是 httphttps 時為選擇性項目;通訊協定是 tcp 時則為必要項目 int
requestPath 通訊協定是 httphttps 時為必要項目;通訊協定是 tcp 時則不允許使用 string
intervalInSeconds (選擇性) 預設值為 5 秒。 這是每個健全狀態探查之間的間隔。 例如,如果 intervalInSeconds == 5,探查會每隔 5 秒傳送一次至本機應用程式端點。 int
numberOfProbes (選擇性) 預設值為 1。 這是變更健全狀態所需的連續探查數目。 例如,如果 numberOfProbles == 3,您需要 3 個連續的「良好」訊號,將健全狀態從「狀況不良/未知」變更為「良好」狀態。 相同的需求適用於將健全狀態變更為「狀況不良」或「未知」狀態。 int
gracePeriod 選擇性,預設值 = intervalInSeconds * numberOfProbes;最大寬限期為7200秒 int

部署應用程式健康狀態延伸模組

有多種方法可以將應用程式健康狀態延伸模組部署至您的擴展集,如下面的範例所詳述。

二進位健全狀態

下列範例會將應用程式健康情況擴充功能 (名稱為 myHealthExtension) 新增至 extensionProfile (位於 Windows 型擴展集的擴展集模型中)。

您也可以使用此範例,藉由進行 PATCH 呼叫,而不是 PUT,將現有的延伸模組從豐富健全狀態變更為二進位健全狀態。

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>", 
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "1.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>"
    }
  }
}

請使用 PATCH 來編輯已部署的延伸模組。

升級 VM 以安裝延伸模組。

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

豐富健全狀態

下列範例會將應用程式健康情況 - 豐富狀態延伸模組 (名稱為 myHealthExtension) 新增至位於 Windows 型擴展集的擴展集模型中的 extensionProfile

您也可以使用此範例,藉由進行 PATCH 呼叫,而不是 PUT,將現有的延伸模組從二進位健全狀態升級為豐富健全狀態。

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>",
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "2.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>",
      "intervalInSeconds": <intervalInSeconds>,
      "numberOfProbes": <numberOfProbes>,
      "gracePeriod": <gracePeriod>
    }
  }
}

請使用 PATCH 來編輯已部署的延伸模組。

升級 VM 以安裝延伸模組。

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

疑難排解

檢視 VMHealth - 單一執行個體

Get-AzVmssVM 
  -InstanceView `
  -ResourceGroupName <rgName> `
  -VMScaleSetName <vmssName> `
  -InstanceId <instanceId> 

檢視 VMHealth – 批次呼叫

這僅適用於使用統一協調流程的虛擬機器擴展集。

GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`

未顯示健全狀態

如果健全狀態未在 Azure 入口網站或透過 GET 呼叫時顯示,請檢查以確定 VM 已升級至最新的模型。 如果 VM 不在最新的模型上,請升級 VM,健全狀態便會顯示。

延伸模組執行輸出記錄

延伸模組執行輸出會記錄至下列目錄中的檔案:

C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension

記錄也會定期擷取應用程式健康狀態狀態。

下一步

了解如何在虛擬機器擴展集上部署您的應用程式