共用方式為


搭配 Azure 虛擬機器使用應用程式健康情況擴充功能

監視應用程式健康情況是用於管理 VM 的重要訊號。 Azure 虛擬機器支援自動 VM 客體修補,藉由監視個別執行個體的健康情況來安全更新 VM。

本文描述如何使用兩種類型的應用程式健康情況擴充功能 (二進位健全狀態豐富健全狀態),以監視 Azure 虛擬機器上所部署應用程式的健康情況。

虛擬機器擴展集也提供應用程式健康情況監視功能,有助啟用輪流升級自動 OS 映像升級自動執行個體修復等功能。 若要體驗這些功能,並享受擴展集增添的規模、可用性和彈性效益,您可將 VM 連結至現有擴展集,或建立新的擴展集

必要條件

本文假設您已熟悉如何使用 Azure 虛擬機器擴充功能

警告

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

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

應用程式健康情況擴充功能會報告虛擬機器內部的應用程式健康情況。 此擴充功能在本機應用程式端點上進行探查,並根據從應用程式接收的 TCP/HTTP(S) 回應更新健全狀態。 Azure 會使用此健全狀態來監視並偵測自動 VM 客體修補期間修補失敗的情形。

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

應用程式健康情況是客戶提供的訊號,可指出 VM 內執行的應用程式狀態。 應用程式健康情況有別於資源健康狀態,後者是平台提供的訊號,用來報告影響 VM 效能的服務等級事件。

二進位與豐富健全狀態

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

功能 二進位健全狀態 豐富健全狀態
可用的健全狀態 兩個可用的狀態:良好狀況不良 四個可用的狀態:良好狀況不良正在初始化未知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 通訊協定:應用程式健康情況將從正在初始化轉換成狀況不良

未知狀態

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

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

二進位健全狀態的擴充功能結構描述

下列 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

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

有多種方法可以將應用程式健康狀態擴充功能部署至您的 VM,如下面的範例所詳述。

二進位健全狀態

下列範例會將名為 myHealthExtension 的應用程式健康情況擴充功能新增至 Windows 虛擬機器。

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

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/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 來編輯已部署的延伸模組。

豐富健全狀態

下列範例會將應用程式健康情況 - 豐富狀態擴充功能 (名稱為 myHealthExtension) 新增至 Windows 虛擬機器。

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

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

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

疑難排解

需要設定探查回應的協助

如需向本機端點發出健全狀態探查回應的範例,請參閱應用程式健康情況範例 (英文)。

檢視 VMHealth

GET https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/instanceView?api-version=2023-07-01

範例回應 (如需最新 VM 健全狀態,請參閱「vmHealth」物件)

"vmHealth": {
    "status": {
      "code": "HealthState/unknown",
      "level": "Warning",
      "displayStatus": "The VM health is unknown",
      "time": "2023-12-04T22:25:39+00:00"
    }
}

擴充功能執行輸出記錄

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

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

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