使用預測自動調整,在虛擬機器擴展集的負載需求之前進行擴增
預測自動調整使用機器學習來以幫助管理和調整具有循環工作負載模式的 Azure 虛擬機器擴展集。 它會根據歷程記錄的 CPU 使用模式,預測虛擬機器擴展集的整體 CPU 負載。 它會藉由觀察和學習歷程記錄使用量來預測整體 CPU 負載。 此流程可確保及時擴展以符合需求。
預測自動調整至少需要七天的歷程記錄才能提供預測。 若要獲得最精確的結果,則需 15 天的歷程記錄資料。
預測自動調整會遵守您為虛擬機器擴展集設定的調整界限。 只要系統預測虛擬機器擴展集的 CPU 負載百分比會超過擴增界限,即會根據您的規格新增執行個體。 您也可以設定要提前多久佈建新執行個體,最多在預測工作負載高峰發生前 1 小時。
「僅預測」可讓您檢視預測的 CPU 預測,而不需要根據預測觸發調整動作。 然後,您可以比較預測與實際工作負載模式,以在啟用預測自動調整功能之前,先組建預測模型的信賴度。
預測自動調整供應項目
- 預測性自動調整僅適用於展示循環 CPU 使用模式的工作負載。
- 只有針對虛擬機器擴展集才提供支援。
- 彙總類型為平均的 CPU 百分比計量是目前唯一支援的計量。
- 預測性自動調整僅支援向外延展。 設定標準自動調整以管理縮減動作。
- 預測性自動調整僅適用於 Azure 商業雲端。 目前不支援 Azure Government 雲端。
僅使用 Azure 入口網站啟用預測自動調整或預測
前往 [虛擬機器擴展集] 畫面,然後選取 [調整]。
在 [自訂自動調整] 區段下,隨即出現 [預測自動調整]。
使用下拉式清單選取項目時,您可以:
- 停用預測自動調整。 在第一次登陸預測自動調整分頁時,[停用] 是預設的選取項目。
- 啟用「僅預測」模式。
- 啟用預測自動調整。
注意
您必須先設定標準重新啟用自動調整條件,才能啟用預測自動調整或「僅預測」模式。
若要啟用「僅預測」模式,請從下拉式清單中選取該選項。 根據「CPU 百分比」,定義擴大的觸發程序。 然後選取儲存。 相同的流程適用於啟用預測自動調整。 若要停用預測自動調整或僅預測模式,請從下拉式清單中選擇 [停用]。
如有需要,請指定啟動前時間,讓執行個體在需要之前完整執行。 您可以在所需的預測時間之前,預先啟動 5 到 60 分鐘的執行個體。
啟用「預測自動調整」或「僅預測」模式並加以儲存後,請選取 [預測圖表]。
您會看到三個圖表:
- 最上方圖表顯示實際與預測總 CPU 百分比的重疊比較。 顯示圖表的時間範圍是從過去七天到接下來的 24 小時。
- 中間圖表顯示過去七天內執行的最大執行個體數目。
- 最下方圖表顯示過去七天內目前的平均 CPU 使用率。
使用 Azure Resource Manager 範本來啟用
擷取虛擬機器擴展集的資源識別碼和虛擬機器擴展集的資源群組。 例如:/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2
使用虛擬機器擴展集資源識別碼和任何自動調整設定參數,更新 autoscale_only_parameters 檔案。
使用 PowerShell 命令來部署包含自動調整設定的範本。 例如:
PS G:\works\kusto_onboard\test_arm_template> new-azurermresourcegroupdeployment -name binzAutoScaleDeploy -resourcegroupname cpatest2 -templatefile autoscale_only.json -templateparameterfile autoscale_only_parameters.json
PS C:\works\autoscale\predictive_autoscale\arm_template> new-azurermresourcegroupdeployment -name binzAutoScaleDeploy - resourcegroupname patest2 -templatefile autoscale_only_binz.json -templateparameterfile autoscale_only_parameters_binz.json
DeploymentName : binzAutoScaleDeploy
ResourceGroupName : patest2
ProvisioningState : Succeeded
Timestamp : 3/30/2021 10:11:02 PM
Mode : Incremental
TemplateLink
Parameters :
Name Type Value
================ ============================= ====================
targetVmssResourceld String /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2
location String East US
minimumCapacity Int 1
maximumCapacity Int 4
defaultCapacity Int 4
metricThresholdToScaleOut Int 50
metricTimeWindowForScaleOut String PT5M
metricThresholdToScaleln Int 30
metricTimeWindowForScaleln String PT5M
changeCountScaleOut Int 1
changeCountScaleln Int 1
predictiveAutoscaleMode String Enabled
Outputs :
Name Type Value
================ ============================== ====================
targetVmssResourceld String /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2
settingLocation String East US
predictiveAutoscaleMode String Enabled
DeloymentDebugLoglevel :
PS C:\works\autoscale\predictive_autoscale\arm_template>
autoscale_only.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"targetVmssResourceId": {
"type": "string"
},
"location": {
"type": "string"
},
"minimumCapacity": {
"type": "Int",
"defaultValue": 2,
"metadata": {
"description": "The minimum capacity. Autoscale engine will ensure the instance count is at least this value."
}
},
"maximumCapacity": {
"type": "Int",
"defaultValue": 5,
"metadata": {
"description": "The maximum capacity. Autoscale engine will ensure the instance count is not greater than this value."
}
},
"defaultCapacity": {
"type": "Int",
"defaultValue": 3,
"metadata": {
"description": "The default capacity. Autoscale engine will preventively set the instance count to be this value if it can not find any metric data."
}
},
"metricThresholdToScaleOut": {
"type": "Int",
"defaultValue": 30,
"metadata": {
"description": "The metric upper threshold. If the metric value is above this threshold then autoscale engine will initiate scale out action."
}
},
"metricTimeWindowForScaleOut": {
"type": "string",
"defaultValue": "PT5M",
"metadata": {
"description": "The metric look up time window."
}
},
"metricThresholdToScaleIn": {
"type": "Int",
"defaultValue": 20,
"metadata": {
"description": "The metric lower threshold. If the metric value is below this threshold then autoscale engine will initiate scale in action."
}
},
"metricTimeWindowForScaleIn": {
"type": "string",
"defaultValue": "PT5M",
"metadata": {
"description": "The metric look up time window."
}
},
"changeCountScaleOut": {
"type": "Int",
"defaultValue": 1,
"metadata": {
"description": "The instance count to increase when autoscale engine is initiating scale out action."
}
},
"changeCountScaleIn": {
"type": "Int",
"defaultValue": 1,
"metadata": {
"description": "The instance count to decrease the instance count when autoscale engine is initiating scale in action."
}
},
"predictiveAutoscaleMode": {
"type": "String",
"defaultValue": "ForecastOnly",
"metadata": {
"description": "The predictive Autoscale mode."
}
}
},
"variables": {
},
"resources": [{
"type": "Microsoft.Insights/autoscalesettings",
"name": "cpuPredictiveAutoscale",
"apiVersion": "2022-10-01",
"location": "[parameters('location')]",
"properties": {
"profiles": [{
"name": "DefaultAutoscaleProfile",
"capacity": {
"minimum": "[parameters('minimumCapacity')]",
"maximum": "[parameters('maximumCapacity')]",
"default": "[parameters('defaultCapacity')]"
},
"rules": [{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricNamespace": "",
"metricResourceUri": "[parameters('targetVmssResourceId')]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "[parameters('metricTimeWindowForScaleOut')]",
"timeAggregation": "Average",
"operator": "GreaterThan",
"threshold": "[parameters('metricThresholdToScaleOut')]"
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "[parameters('changeCountScaleOut')]",
"cooldown": "PT5M"
}
}, {
"metricTrigger": {
"metricName": "Percentage CPU",
"metricNamespace": "",
"metricResourceUri": "[parameters('targetVmssResourceId')]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "[parameters('metricTimeWindowForScaleIn')]",
"timeAggregation": "Average",
"operator": "LessThan",
"threshold": "[parameters('metricThresholdToScaleIn')]"
},
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "[parameters('changeCountScaleOut')]",
"cooldown": "PT5M"
}
}
]
}
],
"enabled": true,
"targetResourceUri": "[parameters('targetVmssResourceId')]",
"predictiveAutoscalePolicy": {
"scaleMode": "[parameters('predictiveAutoscaleMode')]"
}
}
}
],
"outputs": {
"targetVmssResourceId" : {
"type" : "string",
"value" : "[parameters('targetVmssResourceId')]"
},
"settingLocation" : {
"type" : "string",
"value" : "[parameters('location')]"
},
"predictiveAutoscaleMode" : {
"type" : "string",
"value" : "[parameters('predictiveAutoscaleMode')]"
}
}
}
autoscale_only_parameters.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"targetVmssResourceId": {
"value": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2"
},
"location": {
"value": "East US"
},
"minimumCapacity": {
"value": 1
},
"maximumCapacity": {
"value": 4
},
"defaultCapacity": {
"value": 4
},
"metricThresholdToScaleOut": {
"value": 50
},
"metricTimeWindowForScaleOut": {
"value": "PT5M"
},
"metricThresholdToScaleIn": {
"value": 30
},
"metricTimeWindowForScaleIn": {
"value": "PT5M"
},
"changeCountScaleOut": {
"value": 1
},
"changeCountScaleIn": {
"value": 1
},
"predictiveAutoscaleMode": {
"value": "Enabled"
}
}
}
如需 Azure Resource Manager 範本的詳細資訊,請參閱 Resource Manager 範本概觀。
常見問題集
本節會回答常見問題。
為什麼預測圖表上的 CPU 百分比超過 100%?
預測圖表會顯示擴展集中所有機器的累計負載。 如果您在擴展集中有 5 部 VM,則所有 VM 的累計負載上限會是 500%,也就是每個 VM 100% 最大 CPU 負載的五倍。
當您開啟虛擬機器擴展集的預測自動調整時,系統會逐漸發生什麼事?
預測自動調整會使用執行中虛擬機器擴展集的歷程記錄。 如果您的擴展集執行時間少於七天,您會收到模型正在定型的訊息。 如需詳細資訊,請參閱無預測資料訊息。 預測結果會隨時間增加而改善,並且在建立虛擬機器擴展集 15 天後取得最大正確性。
如果工作負載模式發生變化 (但仍保持週期性),模式會辨識變化,並開始調整預測。 預測會隨時間增加而改善。 流量模式發生變化後的 15 天後,系統會達到最大正確性。 請記住,您的標準自動調整規則仍適用。 如果流量意外增加,您的虛擬機器擴展集仍會擴增以符合需求。
如果模型無法正常運作,該怎麼辦?
此模型對於呈現週期性的工作負載效果最佳。 建議您先啟用「僅預測」來評估預測,這會讓擴展集預測的 CPU 使用量與實際觀察到的使用量重疊。 比較並評估結果之後,如果模型預測夠接近您的情節,則可以選擇根據預測計量來啟用調整。
為什麼我必須先啟用標準自動調整,才能啟用預測自動調整?
如果預測模型不適用於您的情節,標準自動調整是必要的後援選項。 標準自動調整將涵蓋非預期的負載尖峰,其不屬於一般 CPU 負載模式。 如果擷取預測資料時發生錯誤,它也會提供後援。
如果同時設定預測和標準自動調整規則,哪項規則才會生效?
如果 CPU 負載出現非預期的尖峰值,或在擷取預測資料時發生錯誤,則會使用標準自動調整規則
我們會使用標準自動調整規則中設定的閾值,以了解您何時想要擴展,以及透過幾個執行個體擴展。 如果您希望虛擬機器擴展集在 CPU 使用量超過 70% 時擴展,而實際或預測的資料顯示 CPU 使用量為或超過 70%,則會進行擴展。
錯誤和警告
本節說明常見的錯誤和警告。
未啟用標準自動調整
您收到下列錯誤訊息:
若要啟用預測性自動調整,請根據「CPU 百分比」計量建立擴增規則。 按一下這裡以移至 [設定] 索引標籤以設定自動調整規則。
此訊息表示您嘗試在啟用標準自動調整之前啟用預測自動調整,並將其設定為將「CPU 百分比」計量與「平均」彙總型別搭配使用。
沒有預測資料
在特定情況下,您不會在預測圖表上看到資料。 此行為不是錯誤,而是預期的行為。
停用預測性自動調整時,您會收到一則訊息,其開頭為「沒有可顯示的資料...」。接著,您會看到要啟用的指示,以便查看預測圖表。
當您第一次建立虛擬機器擴展集,並啟用「僅預測」模式時,您會收到「預測資料正在定型...」的訊息以及返回查看圖表的時間。
下一步
若要深入了解自動調整,請參閱下列文章: