使用指标数学为 Application Auto Scaling 创建目标跟踪扩展策略 - Application Auto Scaling

使用指标数学为 Application Auto Scaling 创建目标跟踪扩展策略

借助指标数学,您可以查询多个 CloudWatch 指标并使用数学表达式来创建基于这些指标的新时间序列。您可以在 CloudWatch 控制台中直观显示生成的时间序列,并将其添加到控制面板中。有关更多信息,请参阅《Amazon CloudWatch 用户指南》中的使用指标数学

以下考虑因素适用于指标数学表达式:

  • 您可以查询任何可用的 CloudWatch 指标。每个指标都是指标名称、命名空间和零个或多个维度的唯一组合。

  • 您可以使用任意算术运算符 (+ - * / ^)、统计函数(例如 AVG 或 SUM)或 CloudWatch 支持的其他函数。

  • 您可以在数学表达式的公式中同时使用指标和其他数学表达式的结果。

  • 指标规范中使用的任何表达式最终都必须返回一个单个时间序列。

  • 您可以使用 CloudWatch 控制台或 CloudWatch GetMetricData API 验证指标数学表达式是否有效。

示例:每个任务的 Amazon SQS 队列积压

要计算每个任务的 Amazon SQS 队列积压,请获取可用于从队列中检索的消息的大致数量,然后将该数字除以服务中运行的 Amazon ECS 任务的数量。有关更多信息,请参阅 AWS 计算博客中的 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 指标 Statistic 周期
m1 ApproximateNumberOfMessagesVisible Sum 1 minute
m2 RunningTaskCount 平均值 1 minute

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

ID Expression
e1 (m1)/(m2)

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

Application Auto Scaling 使用队列架构图
使用该指标数学来创建目标跟踪扩展策略 (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

    注意

    以下是一些可以帮助您查找 CloudWatch 指标的指标名称、命名空间、维度和统计数据的其他资源:

    • 有关 AWS 服务可用指标的更多信息,请参阅 Amazon CloudWatch 用户指南中的发布 CloudWatch 指标的 AWS 服务

    • 要获取带有 AWS CLI 的 CloudWatch 指标的确切指标名称、命名空间和维度(如果适用),请参阅列出指标

  2. 要创建此策略,请运行 put-scaling-policy 命令并将此 JSON 文件作为输入,如下例所示。

    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)和代表您创建的两个 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 更新到最新版本。

限制

  • 最大请求大小为 50KB。这是您在策略定义中使用指标数学时 PutScalingPolicy API 请求的有效负载大小。如果您超过此限制,Application Auto Scaling 会拒绝该请求。

  • 结合使用指标数学与目标跟踪扩缩策略时,不支持以下服务:

    • Amazon Keyspaces(Apache Cassandra 兼容)

    • DynamoDB

    • Amazon EMR

    • Amazon MSK

    • Amazon Neptune