基于自定义 Cloudwatch 警报的自动缩放规则

Auto scale rule based on custom Cloudwatch alarm

我有一个自动扩展的 EC2 服务器组,运行 多个进程。 此进程数随负载而变化,我想根据进程数触发缩放 (up/down)。

我已经成功设置了一个脚本,该脚本每分钟向 Cloudwatch 发送每台服务器上的进程数,我可以在 Cloudwatch 上看到这些。 (我没有设置维度,以便能够获取所有服务器的值)。

然后,我创建了一个警报,它使用发送值的平均值,如果它达到某个限制,它会触发“添加新服务器”到自动缩放组,当它停止时警报,它会触发“删除服务器”。

我的问题是,当我添加新服务器时,平均值下降,因为现在多了一台服务器,这将警报移至正常状态,删除服务器,并再次增加平均值,再次触发闹钟等

例如,限制设置为平均 10 个进程。有 3 个服务器,如果平均值变为 11,我触发警报状态,添加一个服务器。现在有了新服务器,我的 4 台服务器有 33 个进程(3 x 11):平均 8,25 个进程,因此触发了“OK”警报。

我的问题是:是否可以设置一个基于进程数的告警,而不会因为新的触发器导致up-down-up-down的问题?

除了平均值,我可以使用其他东西来触发警报,例如 min/max/I-don't-know。

感谢您的帮助。如果需要,很乐意提供任何其他详细信息。

我想你可以看看 metric math。因此,您可以使用度量数学自行计算平均计数,而不是仅根据您的进程计数指标直接触发警报。您可以使用 ASG 中的 GroupTotalInstances 指标,或者只发布具有实例数的第二个自定义指标。

在这两种情况下,您的警报指标都将使用指标数学将每个评估期的进程数除以 ASG 的大小。

您应该创建一个在 True 时添加实例并在 False 时删除实例的警报。这将导致持续的 'flip-flop' 情况,而不是试图找到稳定状态。

您可以让每个服务器定期向 Amazon CloudWatch 发送自定义指标。然后,您可以将其与 Target tracking scaling policies for Amazon EC2 Auto Scaling - Amazon EC2 Auto Scaling 一起使用,它将计算指标的 平均值 并自动 launch/terminate 个实例以将目标值保持在 10 左右。

这适用于长 运行 的进程(多个进程 运行 并发可能需要 5 分钟以上),但不适用于短的亚分钟进程,因为它需要时间启动新实例。