首页 > 解决方案 > 基于自定义 Cloudwatch 警报的自动缩放规则

问题描述

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

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

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

我的问题是,当我添加新服务器时,平均值下降,因为现在还有一台服务器,这会将警报移动到 ok 状态,移除服务器,然后再次增加平均值,再次触发警报等。

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

我的问题是:是否可以根据进程数设置警报而无需新触发器导致上下问题?

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

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

标签: amazon-web-servicesamazon-elastic-beanstalkamazon-cloudwatch

解决方案


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

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


推荐阅读