本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon ECS 自訂指標的進階預測擴展政策
您可以在預測擴展政策中使用預先定義的或自訂指標。當預先定義的指標,例如 CPU、記憶體等) 不足以充分描述您的應用程式負載時,自訂指標非常有用。
使用自訂指標建立預測擴展政策時,您可以指定 提供的其他 CloudWatch 指標 AWS。或者,您可以指定自己定義和發佈的指標。您也可以使用指標數學來彙總現有指標,並將其轉換為 AWS 不會自動追蹤的新時間序列。例如,透過計算稱為彙總的新總和或平均值來合併資料中的值。產生的資料稱為彙總。
下一節包含如何建構政策的 JSON 結構的最佳實務和範例。
先決條件
若要在預測擴展政策中新增自訂指標,您必須擁有 cloudwatch:GetMetricData
許可。
若要指定自己的指標,而不是 AWS 提供的指標,您必須先將指標發佈至 CloudWatch。如需詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的發佈自訂指標。
如果您發佈自己的指標,應確保以至少五分鐘的頻率發佈資料點。根據所需的期間長度,從 CloudWatch 擷取資料點。例如,負載指標規範使用每小時指標來衡量應用程式的負載。CloudWatch 使用您發佈的指標資料,透過將時間戳記落於同一小時週期內的所有資料點彙總,為任何一小時週期提供單一資料值。
最佳實務
以下最佳實務可協助您更有效地使用自訂指標:
-
負載指標規格最實用的指標是代表 Auto Scaling 群組整體負載的指標。
-
擴展指標規格要擴展的最有用指標是每個任務指標的平均輸送量或使用率。
-
目標使用率必須與擴展指標的類型相符。例如,對於使用 CPU 使用率的政策組態,這是目標百分比。
-
如果不遵循這些建議,則時間序列的預測未來值可能不正確。要驗證資料是否正確,您可以在 主控台中檢視預測值。或者,在您建立預測擴展政策後,檢查呼叫 GetPredictiveScalingForecast API 傳回的
LoadForecast
物件。 -
我們強烈建議您在僅限預測模式下設定預測擴展,以便在預測擴展開始主動擴展之前評估預測。
限制
-
您可以在一個指標規範中查詢最多 10 個指標的資料點。
-
在此限制之下,一個表達式計為一個指標。
使用自訂指標對預測擴展政策進行故障診斷
如果使用自訂指標時出現問題,建議您執行以下操作:
-
如果您在使用搜尋表達式時在藍/綠部署中遇到問題,請確定您建立的搜尋表達式正在尋找部分相符,而不是完全相符。您也應該檢查查詢是否只尋找在特定應用程式中執行的 Auto Scaling 群組。如需搜尋表達式語法的詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的 CloudWatch 搜尋表達式語法。
-
put-scaling-policy 命令會在您建立擴展政策時驗證表達式。不過,此命令可能無法識別偵測到錯誤的確切原因。若要修正這些問題,請對您收到之 get-metric-data 命令請求回應中的錯誤進行疑難排解。您也可以從 CloudWatch 主控台對表達式進行疑難排解。
-
如果
MetricDataQueries
自己指定了 SEARCH() 函數 (在無需 SUM() 等數學函數的狀況下),則您必須為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": []
}