搭配虛擬機器擴展集使用應用程式健康狀態延伸模組
監視應用程式健康狀態是用於管理及升級部署的重要訊號。 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 | 正在初始化 | 執行個體會在擴充功能開始時間自動進入正在初始化狀態。 如需詳細資訊,請參閱正在初始化狀態。 |
正在初始化狀態
此狀態僅適用於豐富健全狀態。 正在初始化狀態只會在延伸模組開始時間發生一次,而且可由延伸模組設定 gracePeriod
和 numberOfProbes
進行設定。
在延伸模組啟動時,應用程式健康情況會維持在正在初始化狀態,直到發生以下兩個案例之一:
- 透過 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 | http 、https 或 tcp |
string |
port | 通訊協定是 http 或 https 時為選擇性項目;通訊協定是 tcp 時則為必要項目 |
int |
requestPath | 通訊協定是 http 或 https 時為必要項目;通訊協定是 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 | http 、https 或 tcp |
string |
port | 通訊協定是 http 或 https 時為選擇性項目;通訊協定是 tcp 時則為必要項目 |
int |
requestPath | 通訊協定是 http 或 https 時為必要項目;通訊協定是 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
記錄也會定期擷取應用程式健康狀態狀態。
下一步
了解如何在虛擬機器擴展集上部署您的應用程式。