使用指標數學表達式 - Amazon EC2 Auto Scaling

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用指標數學表達式

下一節提供預測擴展政策的資訊和範例,說明如何在政策中使用指標數學。

了解指標數學

如果您想要做的就是彙總現有的指標資料,則 CloudWatch 度量數學可以節省發佈另一個量度的工作量和成本 CloudWatch。您可以使用任何 AWS 提供的量度,也可以使用定義為應用程式一部分的量度。例如,您可能會想要計算每個執行個體的 Amazon SQS 佇列待處理項目。您可以透過從佇列中取得可檢索的大致訊息數量,然後將該數字除以 Auto Scaling 群組的執行中容量來得出此結果。

如需詳細資訊,請參閱 Amazon 使用者指南中的使 CloudWatch 用指標數學運算

如果選擇在預測擴展政策中使用指標數學表達式,則請考慮以下幾點:

  • 指標數學運算會使用指標名稱、命名空間和指標維度鍵/值對之唯一組合的資料點。

  • 您可以使用任何算術運算符(+-*/^),統計函數(如 AVG 或 SUM)或其他 CloudWatch 支持的函數。

  • 您可以在數學表達式的公式中同時使用其他數學表達式的指標和結果。

  • 您的指標數學表達式可以由不同的彙總組成。但是,最終彙總結果的最佳實務是將 Average 用於擴展指標,Sum 用於負載指標。

  • 在指標規範中使用的任何表達式都必須最終傳回單一的時間序列。

若要使用指標數學,請執行以下操作:

  • 選擇一或多個 CloudWatch 量度。然後,建立表達式。如需詳細資訊,請參閱 Amazon 使用者指南中的使 CloudWatch 用指標數學運算

  • 使用 CloudWatch主控台或 CloudWatch GetMetricDataAPI 驗證度量數學運算式是否有效。

使用指標數學組合指標的預測擴展政策範例 (AWS CLI)

有時,您可能需要首先以某種方式處理其資料,而不是直接指定指標。例如,您可能有一個從 Amazon SQS 佇列中提取工作的應用程式,並且您可能想要使用佇列中的項目數量作為預測擴展的條件。佇列中的訊息數量並不僅僅定義所需的執行個體數量。因此,需要更多的工作來建立可用於計算每個執行個體待處理項目的指標。如需詳細資訊,請參閱 以 Amazon SQS 為基礎的擴展政策

以下是此案例的預測擴展政策範例。它指定了基於 Amazon SQS ApproximateNumberOfMessagesVisible 指標的擴展和負載指標,即可從佇列中擷取的訊息數量。它還使用 Amazon EC2 Auto Scaling GroupInServiceInstances 指標和數學表達式來計算每個執行個體的待處理項目,以擴展指標。

aws autoscaling put-scaling-policy --policy-name my-sqs-custom-metrics-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json { "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": [] }

藍/綠部署情境中使用的預測擴展政策範例 (AWS CLI)

搜尋表達式提供了進階選項,您可以在該選項中查詢多個 Auto Scaling 群組中的指標,並對其執行數學表達式。這對藍/綠部署尤其實用。

注意

藍/綠部署是一種部署方法,您可以在其中建立兩個獨立但相同的 Auto Scaling 群組。只有一個群組會接收生產流量。使用者流量最初定向至較早的 Auto Scaling 群組 (「藍色」),而新群組 (「綠色」) 用於測試和評估應用程式或服務的新版本。測試並接受新部署後,使用者流量將轉移至綠色 Auto Scaling 群組。然後,您可以在部署成功後刪除藍色群組。

當新 Auto Scaling 群組作為藍/綠色部署的一部分建立時,可以自動將每個群組的指標歷史記錄包含在預測擴展政策中,而無需變更其指標規範。如需詳細資訊,請參閱 AWS 運算部落格上的搭配使用 EC2 Auto Scaling 預測擴展政策搭配藍/綠部署

以下範例政策示範如何執行此操作。在此範例中,政策使用 Amazon EC2 發出的 CPUUtilization 指標。它使用 Amazon EC2 Auto Scaling GroupInServiceInstances 指標和數學表達式來計算每個執行個體的擴展指標值。它還指定了容量指標規範以取得 GroupInServiceInstances 指標。

搜尋表達式會根據指定的搜尋條件尋找多個 Auto Scaling 群組中執行個體的 CPUUtilization。如果您稍後建立了與相同搜尋條件相符的新 Auto Scaling 群組,則會自動包含新 Auto Scaling 群組中執行個體的 CPUUtilization

aws autoscaling put-scaling-policy --policy-name my-blue-green-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json { "MetricSpecifications": [ { "TargetValue": 25, "CustomizedScalingMetricSpecification": { "MetricDataQueries": [ { "Id": "load_sum", "Expression": "SUM(SEARCH('{AWS/EC2,AutoScalingGroupName} MetricName=\"CPUUtilization\" ASG-myapp', 'Sum', 300))", "ReturnData": false }, { "Id": "capacity_sum", "Expression": "SUM(SEARCH('{AWS/AutoScaling,AutoScalingGroupName} MetricName=\"GroupInServiceInstances\" ASG-myapp', 'Average', 300))", "ReturnData": false }, { "Id": "weighted_average", "Expression": "load_sum / capacity_sum", "ReturnData": true } ] }, "CustomizedLoadMetricSpecification": { "MetricDataQueries": [ { "Id": "load_sum", "Expression": "SUM(SEARCH('{AWS/EC2,AutoScalingGroupName} MetricName=\"CPUUtilization\" ASG-myapp', 'Sum', 3600))" } ] }, "CustomizedCapacityMetricSpecification": { "MetricDataQueries": [ { "Id": "capacity_sum", "Expression": "SUM(SEARCH('{AWS/AutoScaling,AutoScalingGroupName} MetricName=\"GroupInServiceInstances\" ASG-myapp', 'Average', 300))" } ] } } ] }

該範例會傳回政策的 ARN。

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