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

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

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

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

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

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

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

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

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

注意

只有在使用 Amazon CLI 或开发工具包时您才能使用指标数学创建目标跟踪扩展策略。此功能在控制台和 Amazon CloudFormation 中尚不可用。

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

要计算每个实例的 Amazon SQS caling 队列积压,请获取可用于从队列中检索的消息的大致数量,然后将该数字除以自动扩缩组的运行容量,该数字即为处于 InService 状态的实例数量。有关更多信息,请参阅根据 Amazon SQS 进行扩展

表达式的逻辑如下:

sum of (number of messages in the queue)/(number of InService instances)

然后,您的 CloudWatch 指标信息如下所示。

ID CloudWatch 指标 统计数据 周期
m1 ApproximateNumberOfMessagesVisible 总计 1 minute
m2 GroupInServiceInstances 平均值 1 minute

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

ID 表达式
e1 (m1)/(m2)
使用该指标数学来创建目标跟踪扩展策略 (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 group size (the number of InService instances)", "Id": "m2", "MetricStat": { "Metric": { "MetricName": "GroupInServiceInstances", "Namespace": "AWS/AutoScaling", "Dimensions": [ { "Name": "AutoScalingGroupName", "Value": "my-asg" } ] }, "Stat": "Average" }, "ReturnData": false }, { "Label": "Calculate the backlog per instance", "Id": "e1", "Expression": "m1 / m2", "ReturnData": true } ] }, "TargetValue": 100 }

    有关更多信息,请参阅《Amazon EC2 Auto Scaling API 参考》中的 TargetTrackingConfiguration

    注意

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

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

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

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

    aws autoscaling put-scaling-policy --policy-name sqs-backlog-target-tracking-scaling-policy \ --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \ --target-tracking-configuration file://config.json

    如果成功,则此命令将返回策略的 Amazon 资源名称(ARN)和代表您创建的两个 CloudWatch 告警的 ARN。

    { "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/sqs-backlog-target-tracking-scaling-policy", "Alarms": [ { "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" }, { "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" } ] }
    注意

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