

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

# 使用指標數學運算建立 Application Auto Scaling 的目標追蹤擴展政策
<a name="application-auto-scaling-target-tracking-metric-math"></a>

利用指標數學，可查詢多個 CloudWatch 指標，並使用數學表達式根據這些指標來建立新的時間序列。您可以在 CloudWatch 主控台視覺化產生的時間序列，並將其新增至儀表板。如需有關指標數學的詳細資訊，請參閱《Amazon CloudWatch 使用者指南》中的[使用指標數學](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)。

指標數學運算式有下列考量：
+ 您可以查詢任何可用的 CloudWatch 指標。每個指標都是指標名稱、命名空間以及零個或多個維度的唯一組合。
+ 您可以使用任何算術運算子 (\+-\*/^)、統計函數 (如 AVG 或 SUM) 或 CloudWatch 支援的其他函數。
+ 您可以在數學運算式的公式中同時使用其他數學運算式的指標和結果。
+ 在指標規範中使用的任何運算式都必須最終傳回單一的時間序列。
+ 您可以透過使用 CloudWatch 主控台或 CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) API 驗證指標數學表達式是否有效。

**Topics**
+ [範例：每個任務的 Amazon SQS 佇列待辦項目](#metric-math-sqs-queue-backlog)
+ [限制](#metric-math-limitations)

## 範例：每個任務的 Amazon SQS 佇列待辦項目
<a name="metric-math-sqs-queue-backlog"></a>

若要計算每個任務的 Amazon SQS 佇列待辦項目，請獲取佇列中可擷取的大致訊息數量，然後將該數字除以服務中執行的 Amazon ECS 任務數。如需詳細資訊，請參閱 AWS 運算部落格上的[使用自訂指標的 Amazon Elastic Container Service (ECS) Auto Scaling](https://aws.amazon.com/blogs/containers/amazon-elastic-container-service-ecs-auto-scaling-using-custom-metrics/)。

運算式的邏輯如下所示：

 `sum of (number of messages in the queue)/(number of tasks that are currently in the RUNNING state)`

那麼，您的 CloudWatch 指標資訊如下。


| ID | CloudWatch 指標 | 統計數字 | Period | 
| --- | --- | --- | --- | 
| m1 | ApproximateNumberOfMessagesVisible | 總和 | 1 分鐘 | 
| m2 | RunningTaskCount | 平均數 | 1 分鐘 | 

您的指標數學 ID 和表達式如下。


| ID | 表達式 | 
| --- | --- | 
| e1 | (m1)/(m2) | 

下圖說明此指標的架構：

![使用佇列架構圖的 Application Auto Scaling](http://docs.aws.amazon.com/zh_tw/autoscaling/application/userguide/images/sqs-custom-metric-diagram.png)


**使用此指標數學建立目標追蹤擴展政策 (AWS CLI)**

1. 將指標數學運算式作為自訂指標規格的一部分儲存在名為 `config.json` 的 JSON 檔案中。

   使用以下範例協助您開始使用。將每個{{使用者輸入預留位置}}替換為自己的資訊。

   ```
   {
       "CustomizedMetricSpecification": {
           "Metrics": [
               {
                   "Label": "Get the queue size (the number of messages waiting to be processed)",
                   "Id": "m1",
                   "MetricStat": {
                       "Metric": {
                           "MetricName": "ApproximateNumberOfMessagesVisible",
                           "Namespace": "AWS/SQS",
                           "Dimensions": [
                               {
                                   "Name": "QueueName",
                                   "Value": "{{my-queue}}"
                               }
                           ]
                       },
                       "Stat": "Sum"
                   },
                   "ReturnData": false
               },
               {
                   "Label": "Get the ECS running task count (the number of currently running tasks)",
                   "Id": "m2",
                   "MetricStat": {
                       "Metric": {
                           "MetricName": "RunningTaskCount",
                           "Namespace": "ECS/ContainerInsights",
                           "Dimensions": [
                               {
                                   "Name": "ClusterName",
                                   "Value": "{{my-cluster}}"
                               },
                               {
                                   "Name": "ServiceName",
                                   "Value": "{{my-service}}"
                               }
                           ]
                       },
                       "Stat": "Average"
                   },
                   "ReturnData": false
               },
               {
                   "Label": "Calculate the backlog per instance",
                   "Id": "e1",
                   "Expression": "m1 / m2",
                   "ReturnData": true
               }
           ]
       },
       "TargetValue": {{100}}
   }
   ```

   如需詳細資訊，請參閱 *Application Auto Scaling API 參考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。
**注意**  
以下是一些其他資源，可協助您尋找 CloudWatch 指標的指標名稱、命名空間、維度和統計資料：  
如需 AWS 服務可用指標的相關資訊，請參閱《Amazon [AWS CloudWatch 使用者指南》中的發佈 CloudWatch 指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html)的 服務。 *Amazon CloudWatch *
若要使用 取得 CloudWatch 指標的確切指標名稱、命名空間和維度 （如適用） AWS CLI，請參閱 [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html)。

1. 若要建立此政策，執行使用 JSON 檔案作為輸入 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令，如以下範例所示。

   ```
   aws application-autoscaling put-scaling-policy --policy-name {{sqs-backlog-target-tracking-scaling-policy}} \
     --service-namespace ecs --scalable-dimension ecs:service:DesiredCount --resource-id {{service/my-cluster/my-service}} \
     --policy-type TargetTrackingScaling --target-tracking-scaling-policy-configuration {{file://config.json}}
   ```

   如果成功，則此命令會傳回政策的 Amazon Resource Name (ARN) 和代表您建立的兩個 CloudWatch 警示的 ARN。

   ```
   {
       "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy: 8784a896-b2ba-47a1-b08c-27301cc499a1:resource/ecs/service/my-cluster/my-service:policyName/sqs-backlog-target-tracking-scaling-policy",
       "Alarms": [
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-service/my-cluster/my-service-AlarmHigh-9bc77b56-0571-4276-ba0f-d4178882e0a0",
               "AlarmName": "TargetTracking-service/my-cluster/my-service-AlarmHigh-9bc77b56-0571-4276-ba0f-d4178882e0a0"
           },
           {
               "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-service/my-cluster/my-service-AlarmLow-9b6ad934-6d37-438e-9e05-02836ddcbdc4",
               "AlarmName": "TargetTracking-service/my-cluster/my-service-AlarmLow-9b6ad934-6d37-438e-9e05-02836ddcbdc4"
           }
       ]
   }
   ```
**注意**  
如果此命令擲回錯誤，請確定您已在 AWS CLI 本機將 更新為最新版本。

## 限制
<a name="metric-math-limitations"></a>
+ 要求大小上限為 50 KB。這是當您在政策定義中使用指標數學運算時 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) API 要求的總承載大小。如果您超過此限制，Application Auto Scaling 會拒絕要求。
+ 對目標追蹤擴展政策使用指標數學運算時，不支援下列服務：
  + Amazon Keyspaces (適用於 Apache Cassandra) 
  + DynamoDB
  + Amazon EMR
  + Amazon MSK
  + Amazon Neptune