使用指標數學表達式 - 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": [] }