使用 Amazon 自訂指標的進階預測擴展政策 ECS - Amazon Elastic Container Service

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

使用 Amazon 自訂指標的進階預測擴展政策 ECS

您可以在預測擴展政策中使用預先定義的或自訂指標。當預先定義的指標,例如 CPU、記憶體等) 不足以充分描述您的應用程式負載時,自訂指標非常有用。

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

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

必要條件

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

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

如果您發佈自己的指標,應確保以至少五分鐘的頻率發佈資料點。資料點會根據其所需的期間長度從 CloudWatch 擷取。例如,負載指標規範使用每小時指標來衡量應用程式的負載。 CloudWatch 使用您發佈的指標資料,透過將所有資料點與每個一小時期間內的時間戳記進行彙總,為任何一小時期間提供單一資料值。

最佳實務

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

  • 負載指標規格最有用的指標是代表 Auto Scaling 群組整體負載的指標。

  • 擴展指標規格要擴展的最有用指標是每個任務指標的平均輸送量或使用率。

  • 目標使用率必須與擴展指標的類型相符。對於使用CPU使用使用率的政策組態,例如,這是目標百分比。

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

  • 我們強烈建議您在僅限預測模式下設定預測擴展,以便在預測擴展開始主動擴展之前評估預測。

限制

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

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

使用自訂指標對預測擴展政策進行故障診斷

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

  • 如果您在使用搜尋表達式時遇到藍/綠部署中的問題,請確定您建立的搜尋表達式正在尋找部分相符,而不是完全相符。您也應該檢查查詢是否只尋找在特定應用程式中執行的 Auto Scaling 群組。如需搜尋表達式語法的詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的CloudWatch 搜尋表達式語法

  • 當您建立擴展政策時, put-scaling-policy命令會驗證表達式。不過,此命令可能無法識別偵測到錯誤的確切原因。若要修正問題,請對從 請求到 get-metric-data命令的回應中收到的錯誤進行故障診斷。您也可以從 CloudWatch 主控台對運算式進行疑難排解。

  • 如果 自行ReturnDataMetricDataQueries指定 SEARCH() 函數,而沒有像 SUM() 的數學函數,則必須指定 false 。這是因為搜尋表達式可能會傳回多個時間序列,並且基於表達式的指標規範只能傳回一個時間序列。

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

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

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

以下是此案例的預測擴展政策範例。它會指定以 Amazon 指標為基礎的擴展和載入SQSApproximateNumberOfMessagesVisible指標,這是可從佇列擷取的訊息數量。它也會使用 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": [] }