Amazon ECS의 사용자 정의 지표를 사용하는 고급 예측 규모 조정 정책 - Amazon Elastic Container Service

Amazon ECS의 사용자 정의 지표를 사용하는 고급 예측 규모 조정 정책

미리 정의된 지표 또는 사용자 정의 지표를 예측 규모 조정 정책에서 사용할 수 있습니다. 사용자 지정 지표는 CPU, 메모리 등과 같이 미리 정의된 지표가 애플리케이션 로드를 충분히 설명하기에 충분하지 않을 때 유용합니다.

사용자 지정 지표를 사용하여 예측 규모 조정 정책을 생성할 때 AWS에서 제공하는 다른 CloudWatch 지표를 지정할 수 있습니다. 그 대신에 직접 정의하고 게시하는 지표를 지정할 수도 있습니다. 또한 지표 수학을 사용하여 기존 지표를 집계하고 AWS가 자동으로 추적하지 않는 새 시계열로 변환할 수 있습니다. 예를 들면, 집계라는 새 합계 또는 평균 계산을 통해 데이터의 값을 결합할 수 있습니다. 결과 데이터를 집계라고 합니다.

다음 섹션에는 정책의 JSON 구조를 구성하는 방법에 대한 모범 사례와 예가 나와 있습니다.

사전 조건

정책에서 사용자 지정 지표를 지정하려면 cloudwatch:GetMetricData 권한이 있어야 합니다.

AWS에서 제공하는 지표 대신 자체 지표를 지정하려면 먼저 지표를 CloudWatch에 게시해야 합니다. 자세한 설명은 Amazon CloudWatch 사용자 가이드사용자 정의 지표 게시를 참조하세요.

자체 지표를 게시하는 경우, 최소 5분 간격으로 데이터 요소를 게시해야 합니다. 데이터 포인트는 필요한 기간을 기준으로 CloudWatch에서 검색됩니다. 예컨대, 로드 지표 사양은 시간별 지표를 사용하여 애플리케이션의 로드를 측정합니다. CloudWatch는 게시된 지표 데이터로 각 1시간 기간에 속하는 타임스탬프가 있는 모든 데이터 요소를 집계하여 1시간 기간 동안 단일 데이터 값을 제공합니다.

모범 사례

다음 모범 사례는 사용자 정의 지표를 보다 효과적으로 사용하는 데 도움이 될 수 있습니다.

  • 로드 지표 사양에 가장 유용한 지표는 Auto Scaling 그룹 전체의 로드를 나타내는 지표입니다.

  • 규모 조정 지표 사양의 규모 조정에 가장 유용한 지표는 태스크 지표당 평균 처리량 또는 사용률입니다.

  • 목표 사용률은 조정 지표 유형과 일치해야 합니다. 예를 들면, CPU 사용률을 사용하는 정책 구성의 경우에는 목표 백분율입니다.

  • 이러한 권장 사항을 따르지 않으면 시계열의 예측된 미래 값이 정확하지 않을 수 있습니다. 데이터가 올바른지 검증하기 위해 콘솔에서 예측된 값을 볼 수 있습니다. 또는 예측 규모 조정 정책을 생성한 후 GetPredictiveScalingForecast API 직접적으로 호출에서 반환된 LoadForecast 객체를 검사합니다.

  • 예측 규모 조정에서 능동적으로 규모 조정이 시작되기 전에 예상을 평가할 수 있게 예상 전용 모드에서 예측적 조정을 구성하는 것이 좋습니다.

제한 사항

  • 하나의 지표 사양에서 최대 10개 지표의 데이터 요소를 쿼리할 수 있습니다.

  • 이 제한을 위해 하나의 표현식이 하나의 지표로 계산됩니다.

사용자 지정 지표로 예측 규모 조정 정책 문제 해결

사용자 정의 지표를 사용하는 동안 문제가 발생하면 다음을 수행하는 것이 좋습니다.

  • 검색 표현식을 사용하는 동안 블루/그린 배포에서 문제가 발생하는 경우 정확히 일치가 아니라 부분 일치를 찾는 검색 표현식을 생성해야 합니다. 또한 쿼리가 특정 애플리케이션에서 실행 중인 Auto Scaling 그룹만 찾는지 확인해야 합니다. 검색 표현식 구문에 대한 자세한 설명은 Amazon CloudWatch 사용자 가이드CloudWatch 검색 표현식 구문을 참조하세요.

  • 조정 규모 정책을 생성할 때 put-scaling-policy 명령이 표현식을 검증합니다. 그러나 이 명령이 탐지된 오류의 정확한 원인을 식별하지 못할 수도 있습니다. 문제를 해결하려면 get-metric-data 명령에 대한 요청의 응답에서 수신하는 오류를 해결합니다. CloudWatch 콘솔에서 표현식의 문제를 해결할 수도 있습니다.

  • MetricDataQueries가 SUM()과 같은 수학 함수 없이 자체적으로 SEARCH() 함수를 지정하는 경우, ReturnData에 대해 false를 지정해야 합니다. 이는 검색 표현식이 여러 시계열을 반환할 수 있고 표현식에 근거하여 하는 지표 사양이 하나의 시계열만 반환할 수 있기 때문입니다.

  • 검색 표현식과 관련된 모든 지표는 해상도가 동일해야 합니다.

지표 수학을 사용하여 지표를 결합하는 예측 조정 정책의 예(AWS CLI)

지표를 직접 지정하는 대신 어떤 방식으로든 해당 데이터를 먼저 처리해야 하는 경우가 있습니다. 예컨대, Amazon SQS 대기열에서 작업을 가져오는 애플리케이션이 있고 대기열의 항목 수를 예측적 조정의 기준으로 사용할 수 있습니다. 대기열의 메시지 수가 필요한 인스턴스 수를 단독으로 정의하지 않습니다. 따라서 인스턴스당 백로그를 계산하는 데 사용할 수 있는 지표를 생성하려면 더 많은 작업이 필요합니다.

다음은 이 시나리오에 대한 예측적 조정 정책의 예입니다. 대기열에서 검색할 수 있는 메시지 수인 Amazon SQS ApproximateNumberOfMessagesVisible 지표를 기준으로 하는 조정 및 로드 지표를 지정합니다. 또한 Amazon EC2 Auto Scaling GroupInServiceInstances 지표와 수학 표현식을 사용하여 조정 지표에 대한 인스턴스당 백로그를 계산합니다.

aws application-autoscaling put-scaling-policy --policy-name my-sqs-custom-metrics-policy \ --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json --service-namespace ecs \ --resource-id service/MyCluster/test \ "MetricSpecifications": [ { "TargetValue": 100, "CustomizedScalingMetricSpecification": { "MetricDataQueries": [ { "Label": "Get the queue size (the number of messages waiting to be processed)", "Id": "queue_size", "MetricStat": { "Metric": { "MetricName": "ApproximateNumberOfMessagesVisible", "Namespace": "AWS/SQS", "Dimensions": [ { "Name": "QueueName", "Value": "my-queue" } ] }, "Stat": "Sum" }, "ReturnData": false }, { "Label": "Get the group size (the number of running instances)", "Id": "running_capacity", "MetricStat": { "Metric": { "MetricName": "GroupInServiceInstances", "Namespace": "AWS/AutoScaling", "Dimensions": [ { "Name": "AutoScalingGroupName", "Value": "my-asg" } ] }, "Stat": "Sum" }, "ReturnData": false }, { "Label": "Calculate the backlog per instance", "Id": "scaling_metric", "Expression": "queue_size / running_capacity", "ReturnData": true } ] }, "CustomizedLoadMetricSpecification": { "MetricDataQueries": [ { "Id": "load_metric", "MetricStat": { "Metric": { "MetricName": "ApproximateNumberOfMessagesVisible", "Namespace": "AWS/SQS", "Dimensions": [ { "Name": "QueueName", "Value": "my-queue" } ], }, "Stat": "Sum" }, "ReturnData": true } ] } } ] }

이 예에서는 정책의 ARN을 반환합니다.

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-sqs-custom-metrics-policy", "Alarms": [] }