예측 자동 크기 조정을 사용하여 가상 머신 확장 집합의 부하 요구 전에 스케일 아웃

예측 자동 크기 조정은 기계 학습을 사용하여 주기적인 워크로드 패턴으로 Azure Virtual Machine Scale Sets를 관리하고 확장하는 데 도움이 됩니다. 과거 CPU 사용 패턴을 기반으로 가상 머신 확장 집합에 대한 전체 CPU 로드를 예측합니다. 과거 사용량을 관찰하고 학습하여 전체 CPU 부하를 예측합니다. 이 프로세스는 수요를 충족하기 위해 적시에 스케일 아웃이 발생하도록 합니다.

예측 자동 크기 조정은 예측을 제공하기 위해 최소 7일간의 기록이 필요합니다. 가장 정확한 결과는 15일 간의 과거 데이터에서 나옵니다.

예측 자동 크기 조정은 가상 머신 확장 집합에 대해 설정한 스케일링 경계를 따릅니다. 컴퓨터에서 가상 머신 확장 집합의 CPU 로드 백분율이 스케일 아웃 경계를 넘을 것이라고 예측하면 사양에 따라 새 인스턴스가 추가됩니다. 또한 예상되는 워크로드 급증이 발생하기 최대 1시간 전에 새 인스턴스를 프로비저닝할 시간을 미리 구성할 수도 있습니다.

예측만을 사용하면 예측을 기반으로 조정 작업을 트리거하지 않고 예측된 CPU 예측을 볼 수 있습니다. 그런 다음 예측 자동 크기 조정 기능을 사용하도록 설정하기 전에 예측을 실제 워크로드 패턴과 비교하여 예측 모델에 대한 신뢰를 빌드할 수 있습니다.

예측 자동 크기 조정 제품

  • 예측 자동 크기 조정은 주기적 CPU 사용 패턴을 나타내는 워크로드를 위한 것입니다.
  • 지원은 가상 머신 확장 집합에만 사용할 수 있습니다.
  • 집계 유형 평균이 있는 백분율 CPU 메트릭은 현재 지원되는 유일한 메트릭입니다.
  • 예측 자동 크기 조정은 스케일 아웃만 지원합니다. 스케일 인 작업을 관리하도록 표준 자동 크기 조정을 구성합니다.
  • 예측 자동 크기 조정은 Azure 상용 클라우드에서만 사용할 수 있습니다. Azure Government 클라우드는 현재 지원되지 않습니다.

Azure Portal에서만 예측 또는 예측 자동 크기 조정 사용하도록 설정

  1. 가상 머신 확장 집합 화면으로 이동하여 스케일링을 선택합니다.

    Azure Portal의 왼쪽 메뉴에서 스케일링을 선택하는 것을 보여 주는 스크린샷

  2. 사용자 지정 자동 크기 조정 섹션 아래에 예측 자동 크기 조정이 나타납니다.

    Azure Portal에서 사용자 지정 자동 크기 조정 및 예측 자동 크기 조정 옵션을 선택하는 방법을 보여 주는 스크린샷

    드롭다운 선택을 사용하여 다음을 수행할 수 있습니다.

    • 예측 자동 크기 조정을 사용하지 않도록 설정합니다. 사용하지 않도록 설정은 예측 자동 크기 조정을 위해 페이지를 처음 방문할 때 기본 선택입니다.
    • 예측 전용 모드를 사용하도록 설정합니다.
    • 예측 자동 크기 조정을 사용하도록 설정합니다.

    참고 항목

    예측 자동 크기 조정 또는 예측 전용 모드를 사용하도록 설정하려면 먼저 표준 반응 자동 크기 조정 조건을 설정해야 합니다.

  3. 예측 전용 모드를 사용하도록 설정하려면 드롭다운에서 선택합니다. 백분율 CPU를 기반으로 스케일 아웃 트리거를 정의합니다. 그런 다음 저장을 선택합니다. 예측 자동 크기 조정을 사용하도록 설정하는 데에도 동일한 프로세스가 적용됩니다. 예측 자동 크기 조정 또는 예측 전용 모드를 사용하지 않도록 설정하려면 드롭다운에서 사용하지 않도록 설정를 선택합니다.

    예측 전용 모드를 사용하도록 설정하는 방법을 보여 주는 스크린샷

  4. 원하는 경우 인스턴스가 필요하기 전에 전체 실행되도록 사전 시작 시간을 지정합니다. 필요한 예측 시간 5~60분 전에 인스턴스를 사전 실행할 수 있습니다.

    예측 자동 크기 조정 사전 출시 설정을 보여 주는 스크린샷.

  5. 예측 자동 크기 조정 또는 예측 전용 모드를 사용하도록 설정하고 저장한 후 예측 차트를 선택합니다.

    예측 차트 메뉴 옵션 선택을 보여 주는 스크린샷

  6. 세 개의 차트가 표시됩니다.

    예측 자동 크기 조정용 차트 3개를 보여 주는 스크린샷

    • 상단 차트는 실제와 예측된 총 CPU 백분율의 중첩 비교를 보여 줍니다. 표시된 그래프의 시간 범위는 지난 7일에서 다음 24시간까지입니다.
    • 중간 차트는 지난 7일 동안 실행된 최대 인스턴스 수를 보여 줍니다.
    • 하단 차트는 지난 7일 동안의 현재 평균 CPU 사용률을 보여 줍니다.

Azure Resource Manager 템플릿을 사용하여 사용하도록 설정

  1. 가상 머신 확장 집합의 가상 머신 확장 집합 리소스 ID 및 리소스 그룹을 검색합니다. 예: /subscriptions/e954e48d-abcd-abcd-abcd-3e0353cb45ae/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2

  2. 가상 머신 확장 집합 리소스 ID 및 자동 크기 조정 설정 매개 변수로 autoscale_only_parameters 파일을 업데이트합니다.

  3. PowerShell 명령을 사용하여 자동 크기 조정 설정이 포함된 템플릿을 배포합니다. 예시:

PS G:\works\kusto_onboard\test_arm_template> new-azurermresourcegroupdeployment -name binzAutoScaleDeploy -resourcegroupname cpatest2 -templatefile autoscale_only.json -templateparameterfile autoscale_only_parameters.json

Azure Resource Manager 템플릿을 실행하여 예측 자동 크기 조정을 배포할 때 이전 명령의 PowerShell 명령 출력을 보여 주는 스크린샷

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/e954e48d-b252-b252-b252-3e0353cb45ae/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% 이상인 이유는 무엇인가요?

예측 차트는 확장 집합의 모든 머신에 대한 누적 부하를 보여 줍니다. 확장 집합에 VM이 5개 있는 경우 모든 VM의 최대 누적 로드는 500%, 즉 각 VM의 최대 CPU 로드 100%의 5배가 됩니다.

가상 머신 확장 집합에 대해 예측 자동 크기 조정을 켜면 시간이 지나면 어떻게 되나요?

예측 자동 크기 조정은 실행 중인 가상 머신 확장 집합의 기록을 사용합니다. 확장 집합이 7일 미만으로 실행된 경우 모델이 학습되고 있다는 메시지를 받게 됩니다. 자세한 내용은 예측 데이터 없음 메시지를 참조하세요. 시간이 지남에 따라 예측이 개선되고 가상 머신 확장 집합이 만들어진 후 15일이 지나면 최대 정확도를 달성합니다.

워크로드 패턴에 대한 변경이 발생하지만 주기적으로 유지되는 경우 모델은 변경을 인식하고 예측을 조정하기 시작합니다. 시간이 지날수록 예측이 향상됩니다. 트래픽 패턴이 변경된 후 15일이 지나면 최대 정확도에 도달합니다. 표준 자동 크기 조정 규칙이 계속 적용됩니다. 예기치 못한 트래픽 증가가 새로 발생하는 경우 가상 머신 확장 집합은 계속해서 수요를 충족하도록 스케일 아웃됩니다.

모델이 잘 작동하지 않으면 어떻게 해야 하나요?

모델링은 주기성을 나타내는 워크로드에서 가장 잘 작동합니다. 확장 집합의 예측된 CPU 사용량을 실제 관찰된 사용량과 오버레이하는 "예측만"을 사용하도록 설정하여 예측을 먼저 평가하는 것이 좋습니다. 결과를 비교하고 평가한 후에는 모델 예측이 시나리오에 충분히 근접한 경우 예측된 메트릭을 기반으로 조정을 사용하도록 설정하도록 선택할 수 있습니다.

예측 자동 크기 조정을 사용하도록 설정하기 전에 표준 자동 크기 조정을 사용하도록 설정해야 하는 이유는 무엇인가요?

표준 자동 크기 조정은 예측 모델이 시나리오에 적합하지 않은 경우 필요한 대체입니다. 표준 자동 크기 조정은 일반적인 CPU 부하 패턴의 일부가 아닌 예기치 않은 로드 급증을 처리합니다. 또한 예측 데이터를 검색할 때 오류가 발생하는 경우 폴백을 제공합니다.

예측 및 표준 자동 크기 조정 규칙이 모두 설정된 경우 어떤 규칙이 적용되나요?

표준 자동 크기 조정 규칙은 CPU 부하가 예기치 않게 급증하거나 예측 데이터를 검색할 때 오류가 발생하는 경우 사용됩니다.

표준 자동 크기 조정 규칙에 설정된 임계값을 사용하여 스케일 아웃하려는 시기와 인스턴스 수를 파악합니다. CPU 사용량이 70%를 초과하고 실제 또는 예측 데이터에 CPU 사용량이 70%를 초과하거나 초과할 때 가상 머신 확장 집합이 스케일 아웃되도록 하려면 스케일 아웃이 발생합니다.

오류 및 경고

이 섹션에서는 일반적인 오류 및 경고를 다룹니다.

표준 자동 크기 조정을 사용하도록 설정하지 않았습니다.

다음과 같은 오류 메시지가 표시됩니다.

예측 자동 크기 조정을 사용하도록 설정하려면 'CPU 비율' 메트릭을 기반으로 스케일 아웃 규칙을 만듭니다. '구성' 탭으로 이동하여 자동 크기 조정 규칙을 설정하려면 여기를 클릭합니다.

오류 메시지 예측 자동 크기 조정을 보여 주는 스크린샷은 현재 리소스의 CPU 메트릭 백분율을 기반으로 합니다.

이 메시지가 표시되면 표준 자동 크기 조정을 사용하도록 설정하고 평균 집계 형식과 함께 백분율 CPU 메트릭을 사용하도록 설정하기 전에 예측 자동 크기 조정을 사용하도록 설정하려고 시도한 것입니다.

예측 데이터 없음

특정 조건에서는 예측 차트에 데이터가 표시되지 않습니다. 이 동작은 오류가 아니라 의도된 동작입니다.

예측 자동 크기 조정이 사용하지 않도록 설정되면 "표시할 데이터가 없습니다..."로 시작하는 메시지가 대신 표시되며 예측 차트를 볼 수 있도록 사용하도록 설정할 항목에 대한 지침이 표시됩니다.

표시할 데이터 없음 메시지를 보여 주는 스크린샷

가상 머신 확장 집합을 처음 만들고 예측 전용 모드를 사용하도록 설정하면 "예측 데이터를 학습하는 중입니다..."라는 메시지가 표시되고 차트를 보기 위해 돌아갈 시간이 표시됩니다.

예측 데이터가 학습 중이라는 메시지를 보여 주는 스크린샷입니다.

다음 단계

다음 문서에서 자동 크기 조정에 대해 자세히 알아봅니다.