

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用指标数学为 Application Auto Scaling 创建目标跟踪扩展策略
<a name="application-auto-scaling-target-tracking-metric-math"></a>

使用指标数学，您可以查询多个 CloudWatch 指标，并使用数学表达式根据这些指标创建新的时间序列。您可以在 CloudWatch 控制台中直观显示生成的时间序列，并将其添加到控制面板中。有关指标数学的更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[使用指标数学](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/using-metric-math.html)。

以下考虑因素适用于指标数学表达式：
+ 您可以查询任何可用的 CloudWatch 指标。每个指标都是指标名称、命名空间和零个或多个维度的唯一组合。
+ 您可以使用任何算术运算符 (\$1-\$1/^)、统计函数（例如 AVG 或 SUM）或其他支持的函数。 CloudWatch 
+ 您可以在数学表达式的公式中同时使用指标和其他数学表达式的结果。
+ 指标规范中使用的任何表达式最终都必须返回一个单个时间序列。
+ 您可以使用 CloudWatch 控制台或 CloudWatch [GetMetricData](https://docs.amazonaws.cn/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 任务的数量。有关更多信息，请参阅计算博客上[使用自定义指标的亚马逊弹性容器服务 (ECS) A Amazon uto Sc](https://www.amazonaws.cn/blogs/containers/amazon-elastic-container-service-ecs-auto-scaling-using-custom-metrics/) aling。

表达式的逻辑如下：

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

那么您的 CloudWatch 指标信息如下所示。


| ID | CloudWatch 指标 | Statistic | 周期 | 
| --- | --- | --- | --- | 
| m1 | ApproximateNumberOfMessagesVisible | Sum | 1 minute | 
| m2 | RunningTaskCount | 平均值 | 1 minute | 

您的指标数学 ID 和表达式如下所示。


| ID | Expression | 
| --- | --- | 
| e1 | (m1)/(m2) | 

下图阐明了此指标的架构：

![\[Application Auto Scaling 使用队列架构图\]](http://docs.amazonaws.cn/autoscaling/application/userguide/images/sqs-custom-metric-diagram.png)


**使用该指标数学来创建目标跟踪扩展策略 (Amazon CLI)**

1. 将指标数学表达式作为自定义指标规范的一部分存储在名为 `config.json` 的 JSON 文件中。

   使用下面的示例帮助您快速开始。将每个 *user input placeholder* 替换为您自己的信息。

   ```
   {
       "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
   }
   ```

   有关更多信息，请参阅《App *licati [TargetTrackingScalingPolicyConfiguration](https://docs.amazonaws.cn/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)on Auto Scaling API 参考*》中的。
**注意**  
以下是一些其他资源，可以帮助您查找指标名称、命名空间、维度和指标 CloudWatch 统计信息：  
有关 Amazon 服务的可用指标的信息，请参阅《*亚马逊 CloudWatch 用户指南*》中[发布 CloudWatch 指标的Amazon 服务](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html)。
要使用获取指标的确切指标名称、命名空间和维度（如果适用） Amazon CLI，请参阅[列表 CloudWatch ](https://docs.amazonaws.cn/cli/latest/reference/cloudwatch/list-metrics.html)指标。

1. 要创建此策略，请使用 JSON 文件作为输入运行[put-scaling-policy](https://docs.amazonaws.cn/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 资源名称 (ARN) 和代表您创建 ARNs 的两个 CloudWatch 警报中的一个。

   ```
   {
       "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"
           }
       ]
   }
   ```
**注意**  
如果此命令引发错误，请确保已将 Amazon CLI 本地版本更新到最新版本。

## 限制
<a name="metric-math-limitations"></a>
+ 最大请求大小为 50KB。这是您在策略定义中使用公制数学时 [PutScalingPolicy](https://docs.amazonaws.cn/autoscaling/application/APIReference/API_PutScalingPolicy.html)API 请求的总有效负载大小。如果您超过此限制，Application Auto Scaling 会拒绝该请求。
+ 结合使用指标数学与目标跟踪扩缩策略时，不支持以下服务：
  + Amazon Keyspaces（Apache Cassandra 兼容） 
  + DynamoDB
  + Amazon EMR
  + Amazon MSK
  + Amazon Neptune