针对 Auto Scaling 组的每个实例的 AWS Cloudwatch 警报
Posted
技术标签:
【中文标题】针对 Auto Scaling 组的每个实例的 AWS Cloudwatch 警报【英文标题】:AWS Cloudwatch alarm for each single instance of an auto scaling group 【发布时间】:2017-07-13 18:35:27 【问题描述】:我们在 AWS 中配置了一个 Auto Scaling 组。它工作正常。我们为该组配置了一些警报,例如:如果平均 CPUUtilization > 60 持续 2 分钟发送警报...使用 AWS CLI。
唯一的问题是,如果我们想监控组中的每个实例。我们必须手动配置它们。他们有没有办法像配置、模板一样自动完成?
【问题讨论】:
您需要在每个实例上单独发出警报的用例是什么? 【参考方案1】:Amazon CloudWatch 警报可以在整个Auto Scaling 组 上创建,例如Average CPUUtilization
。这是因为警报用于告诉 Auto Scaling 何时添加/删除实例,并且此类决策将基于整个组。例如,如果一台机器 100% 忙碌,而另一台机器 0% 忙碌,则平均而言该组只有 50% 忙碌。
没有理由对自动扩展组中的各个实例设置警报,至少在触发扩展操作时是这样。
没有内置功能来指定将单独应用于每个自动缩放实例的警报。您可以通过在 Auto Scaling 添加/删除实例时响应 Amazon SNS 通知以编程方式执行此操作,但这需要您自己编写代码。
【讨论】:
感谢您的回答。就像您的示例一样,我们有两个实例,一个是 100% 忙,另一个是 0% 忙。我们的负载均衡器正在使用循环,大约 50% 的流量仍将被定向到实例 1,该实例已超载。所以我们想避免这种情况,并在每个实例上做一些警报。 您的请求是否占用大量资源以致占用大量 CPU 或长时间?如果是这样,您可能最好通过 SQS 对请求进行排队以进行后端处理,而不是让最终用户等待很长时间。如果您的请求相对较短(例如最多 5-10 秒),它们将平均在服务器之间平衡。 这正是我想要找出的。如果我有一个主机有问题(例如卡在高 cpu 上),我希望得到一个警报,尽管 avg。没问题【参考方案2】:您可以使用生命周期挂钩和一点 lambda 胶水来完成此操作。当您有用于添加或终止实例的生命周期事件时,您可以在该单个实例上创建警报或通过 lambda 函数将其删除(取决于事件)。
在 John 的观点中,这是一种带有水平扩展和负载平衡的反模式。然而,理论和实践有时会出现分歧。
【讨论】:
以上是关于针对 Auto Scaling 组的每个实例的 AWS Cloudwatch 警报的主要内容,如果未能解决你的问题,请参考以下文章
Java 计划任务是不是在 AWS Auto Scaling 组的所有 EC2 实例上运行?