使用指标数学为 Application Auto Scaling 创建目标跟踪扩展策略 - Application Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

使用指标数学,您可以查询多个 CloudWatch 指标,并使用数学表达式根据这些指标创建新的时间序列。您可以在 CloudWatch 控制台中可视化生成的时间序列并将其添加到仪表板中。有关指标数学的更多信息,请参阅 Amazon CloudWatch 用户指南中的使用指标数学

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

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

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

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

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

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

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

要计算每个任务的 Amazon SQS 队列积压,请获取可用于从队列中检索的消息的大致数量,然后将该数字除以服务中运行的 Amazon ECS 任务的数量。有关更多信息,请参阅计算博客上使用自定义指标的亚马逊弹性容器服务 (ECS) A Amazon uto Sc 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 使用队列架构图
使用该指标数学来创建目标跟踪扩展策略 (Amazon 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 }

    有关更多信息,请参阅《App licati TargetTrackingScalingPolicyConfigurationon Auto Scaling API 参考》中的。

    注意

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

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

    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" } ] }
    注意

    如果此命令引发错误,请确保已将 Amazon CLI 本地版本更新到最新版本。

限制

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

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

    • Amazon Keyspaces(Apache Cassandra 兼容)

    • DynamoDB

    • Amazon EMR

    • Amazon MSK

    • Amazon Neptune