使用指标数学为 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 GetMetricDataAPI 验证指标数学表达式是否有效。

注意

只有在使用 Amazon CLI 或 SDK 时,才能使用指标数学创建目标跟踪扩展策略。此功能尚未在控制台中提供,并且 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 公制 Statistic 周期
m1 ApproximateNumberOfMessagesVisible Sum 1 minute
m2 GroupInServiceInstances 平均值 1 minute

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

ID Expression
e1 (m1)/(m2)

下图说明了该指标的架构:


                            Amazon EC2 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 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 }

    有关更多信息,请参阅 TargetTrackingConfigurationAmazon EC2 Auto Scaling API 参考中的。

    注意

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

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

    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:us-west-2:123456789012:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/sqs-backlog-target-tracking-scaling-policy", "Alarms": [ { "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" }, { "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" } ] }
    注意

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