amazon-web-services - 基于自定义 Cloudwatch 警报的自动缩放规则
问题描述
我有一组运行多个进程的自动扩展 EC2 服务器。这个进程数随着负载而变化,我想根据进程数触发缩放(向上/向下)。
我已经成功设置了一个脚本,每分钟向 Cloudwatch 发送每台服务器上的进程数,我可以在 Cloudwatch 上看到这些。(我没有设置维度,以便能够获取所有服务器的值)。
然后,我创建了一个警报,它使用发送值的平均值,如果达到某个限制,它会触发“添加新服务器”到 Auto Scaling 组,当它停止警报时,它会触发一个“删除服务器”。
我的问题是,当我添加新服务器时,平均值下降,因为现在还有一台服务器,这会将警报移动到 ok 状态,移除服务器,然后再次增加平均值,再次触发警报等。
例如,限制平均设置为 10 个进程。有3台服务器,如果平均变成11台,我触发报警状态,增加一台服务器。现在有了新服务器,我有 4 个服务器的 33 个进程(3 x 11):平均 8,25 个进程,因此触发了“OK”警报。
我的问题是:是否可以根据进程数设置警报而无需新触发器导致上下问题?
我可以使用其他东西来触发警报,而不是平均值,例如 min/max/I-don't-know。
谢谢您的帮助。如果需要,很乐意提供任何其他详细信息。
解决方案
我想你可以看看metric math。因此,您可以使用度量数学自己计算平均计数,而不是仅根据您的进程计数指标直接触发警报。您可以使用GroupTotalInstances
ASG 中的指标,或者仅发布具有实例数的第二个自定义指标。
在这两种情况下,您的警报指标将使用指标数学将每个评估期的进程数除以 ASG 的大小。
推荐阅读
- android - 在 Future 的 then 中返回 Future
- python - 更改循环中创建的 tkinter 按钮的颜色?
- javascript - 按日期排序数组意外结果
- visual-studio - 通过 Device Portal 或 Visual Studio 将大型应用程序旁加载到 Xbox One 时一直失败……为什么?
- java - 如何在 Spring 中实现视频导出器?
- javascript - 如何保持 Material-UI 表格可滚动并具有动态高度?
- java - 如何通过 NFC 阅读器从 GooglePay/ApplePay 获取有效的信用卡号?
- java - DateTimeFormatter.parse() 更正日期信息而不是抛出异常
- python - 在附加到列表之前过滤字典
- c# - 我应该将什么传递给 SQLitePCL.raw.SetProvider() 以避免“'Microsoft.Data.Sqlite.SqliteConnection' 的类型初始化程序引发异常”