使用自訂指標進行進階預測擴展政策設定 - Amazon EC2 Auto Scaling

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

使用自訂指標進行進階預測擴展政策設定

在預測擴展政策中,您可以使用預先定義或自訂的指標。當預先定義指標 (CPU、網路輸入/輸出和 Application Load Balancer 請求計數) 未充分描述您的應用程式負載時,自訂指標會非常實用。

使用自訂指標建立預測擴展政策時,您可以指定由提供的其他指 CloudWatch 標 AWS,也可以指定自行定義和發佈的指標。您也可以使用指標數學來彙總現有量度,並將其轉換為 AWS 不會自動追蹤的新時間序列。當您合併資料中的值時 (例如,透過計算新的總和或平均值),它稱為執行彙總。產生的資料稱為彙總

下一節包含如何建構政策的 JSON 結構的最佳實務和範例。

最佳實務

以下最佳實務可協助您更有效地使用自訂指標:

  • 對於負載規範,最實用的指標是以 Auto Scaling 群組作為整體 (而不考慮該群組的容量) 來表示負載的指標。

  • 對於擴展指標規範,要擴展的最實用指標是每個執行個體指標的平均輸送量或使用率。

  • 擴展指標必須與容量成反比。也就是說,如果 Auto Scaling 群組中的執行個體數量增加,則擴展指標應減少大致相同的比例。為確保預測擴展按預期進行,負載指標和擴展指標還必須彼此密切關聯。

  • 目標使用率必須與擴展指標的類型相符。對於使用 CPU 使用率的政策組態,這是一個目標百分比。對於使用輸送量 (如請求或訊息數量) 的政策組態,這是在任何一分鐘間隔內每個執行個體的請求或訊息的目標數量。

  • 如果不遵循這些建議,則時間序列的預測未來值可能不正確。要驗證資料是否正確,您可以在 Amazon EC2 Auto Scaling 主控台中檢視預測值。或者,在您建立預測性擴展政策之後,請檢查呼叫 GetPredictiveScalingForecastAPI 所傳回的LoadForecastCapacityForecast物件。

  • 強烈建議您在 forecast only (僅預測) 模式中設定預測擴展,以便在預測擴展主動擴展容量之前評估預測。

必要條件

若要在預測擴展政策中新增自訂指標,您必須擁有 cloudwatch:GetMetricData 許可。

若要指定您自己的量度而非 AWS 提供的指標,您必須先將指標發佈至 CloudWatch。如需詳細資訊,請參閱 Amazon CloudWatch 使用者指南中的發佈自訂指

如果您發佈自己的指標,應確保以至少五分鐘的頻率發佈資料點。Amazon EC2 Auto Scaling 會 CloudWatch 根據所需的期間長度從中擷取資料點。例如,負載量度規格會使用每小時度量來測量應用程式的負載。 CloudWatch 使用您已發佈的指標資料,透過彙總所有資料點,其中包含落在每一小時期間內的時間戳記,以提供任何一小時期間的單一資料值。

建構自訂指標的 JSON

下節包含如何設定預測性資源調整以查詢來源資料的範例 CloudWatch。設定此選項有兩種不同的方法,而您選擇的方法會影響您用來建構預測擴展政策的 JSON 的格式。使用指標數學時,JSON 的格式會根據所執行的指標數學而進一步變化。

  1. 若要建立直接從其他提供的 CloudWatch 度量 AWS 或您發佈的指標取得資料的原則 CloudWatch,請參閱具有自訂負載和擴展指標的預測擴展政策範例 (AWS CLI)

  2. 若要建立可查詢多個 CloudWatch 量度的原則,並使用數學運算式根據這些量度建立新的時間序列,請參閱使用指標數學表達式

具有自訂負載和擴展指標的預測擴展政策範例 (AWS CLI)

若要使用自訂負載和縮放指標建立預測性擴展政策 AWS CLI,請將的引數儲存--predictive-scaling-configuration在名為的 JSON 檔案中config.json

您可以藉由將以下範例中的可替換值換成您的指標和目標使用率的值,開始新增自訂指標。

{ "MetricSpecifications": [ { "TargetValue": 50, "CustomizedScalingMetricSpecification": { "MetricDataQueries": [ { "Id": "scaling_metric", "MetricStat": { "Metric": { "MetricName": "MyUtilizationMetric", "Namespace": "MyNameSpace", "Dimensions": [ { "Name": "MyOptionalMetricDimensionName", "Value": "MyOptionalMetricDimensionValue" } ] }, "Stat": "Average" } } ] }, "CustomizedLoadMetricSpecification": { "MetricDataQueries": [ { "Id": "load_metric", "MetricStat": { "Metric": { "MetricName": "MyLoadMetric", "Namespace": "MyNameSpace", "Dimensions": [ { "Name": "MyOptionalMetricDimensionName", "Value": "MyOptionalMetricDimensionValue" } ] }, "Stat": "Sum" } } ] } } ] }

如需詳細資訊,請參閱 Amazon EC2 Auto Scaling API 參考MetricDataQuery中的。

注意

以下是一些其他資源,可協助您尋找測量結果名稱、命名空間、維 CloudWatch 度和統計資料:

  • 如需 AWS 服務可用指標的相關資訊,請參閱 Amazon CloudWatch 使用者指南中的發佈指 CloudWatch 標的AWS 服務

  • 若要取得量度的確切度量名稱、命名空間和維度 (如果適用) AWS CLI,請參閱清單 CloudWatch 量度。

若要建立此原則,請使用 JSON 檔案作為輸入來執行put-scaling-policy命令,如下列範例所示。

aws autoscaling put-scaling-policy --policy-name my-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json

如果成功,此命令會傳回政策的 Amazon Resource Name (ARN)。

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

使用指標數學表達式

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

了解指標數學

如果您想要做的就是彙總現有的指標資料,則 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": [] }

考量事項和疑難排解

如果使用自訂指標時出現問題,建議您執行以下操作:

  • 如果提供了錯誤訊息,則請閱讀該訊息,並在可行的狀況下解決其報告的問題。

  • 如果嘗試在藍色/綠色部署案例中使用搜尋表達式時出現問題,則請首先確保您了解如何建立查找部分相符而不是完全相符的搜尋表達式。此外,請檢查查詢是否僅尋找執行特定應用程式的 Auto Scaling 群組。如需搜尋運算式語法的詳細資訊,請參閱 Amazon CloudWatch 使用者指南中的CloudWatch 搜尋運算式語法

  • 如果您未事先驗證運算式,put-scaling-policy命令會在您建立資源調度政策時對其進行驗證。但是,此命令可能無法識別偵測到之錯誤的確切原因。若要修正這些問題,請疑難排解您在get-metric-data命令要求的回應中收到的錯誤。您也可以從 CloudWatch 主控台疑難排解運算式。

  • 當您在主控台中檢視 Load (負載) 和 Capacity (容量) 圖表時,Capacity (容量) 圖表可能不會顯示任何資料。要確保圖表具有完整的資料,請確保始終如一地為 Auto Scaling 群組啟用群組指標。如需詳細資訊,請參閱 啟用 Auto Scaling 群組指標 (主控台)

  • 當應用程式在其生命週期內於不同的 Auto Scaling 群組中執行時,容量指標規範僅對藍/綠色部署有用。此自訂指標允許您提供多個 Auto Scaling 群組的總容量。預測擴展使用此選項來顯示主控台 Capacity (容量) 圖表中的歷史資料。

  • 如果 MetricDataQueries 自己指定了 SEARCH() 函數 (在無需 SUM() 等數學函數的狀況下),則您必須為 ReturnData 指定 false。這是因為搜尋表達式可能會傳回多個時間序列,並且基於表達式的指標規範只能傳回一個時間序列。

  • 搜尋表達式中涉及的所有指標均應具有相同的解析度。

限制

  • 您可以在一個指標規範中查詢最多 10 個指標的資料點。

  • 在此限制之下,一個表達式計為一個指標。