如何配置单条CloudWatch Event Rule实现区域全EC2健康检查告警
单条CloudWatch规则实现同区域全EC2健康检查告警方案
你需要的同区域所有EC2实例健康检查通过率低于1/2时触发通知的需求,无需为每台实例单独配置告警,以下是两种可实现的方案:
方案1:CloudWatch聚合指标告警(更简单,推荐)
直接通过CloudWatch指标数学计算(Metric Math)做跨实例聚合,全程仅需1条告警规则:
- 进入CloudWatch控制台「指标」页面,选择EC2的「状态检查」指标分类,添加两个聚合指标:
- 所有实例
StatusCheckFailed_Instance指标的求和结果,命名为unhealthy_count - 所有实例总数的统计结果,可通过EC2实例指标做
COUNT()聚合得到,命名为total_count
- 所有实例
- 新增Metric Math表达式:
IF(unhealthy_count / total_count >= 0.5, 1, 0),命名为alarm_trigger,返回值为1时代表健康检查通过率≤1/2 - 为
alarm_trigger指标创建告警,阈值设为≥1,统计周期可按需求选择(通常1~5分钟),告警触发动作绑定用于发通知的SNS主题即可
如果你需要监控的是ALB/NLB目标组下实例的负载均衡健康检查,直接替换上述指标为AWS/ApplicationELB或AWS/NetworkELB下的HealthyHostCount、UnHealthyHostCount做聚合即可。
方案2:EventBridge+Lambda事件驱动方案(适合需要事件触发而非定时轮询的场景)
如果你希望通过EC2/CloudTrail事件驱动检测,只需配置1条EventBridge(原CloudWatch Events)规则即可:
- 新建EventBridge规则,事件模式填入以下配置:
{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification", "AWS API Call via CloudTrail"], "detail": { "eventName": ["DescribeInstanceStatus"] } }
- 规则目标绑定Lambda函数,在函数内调用
describe_instance_status接口拉取当前区域所有实例的健康状态,计算通过率达到阈值后触发SNS通知即可 - 如需筛选特定标签的实例,在Lambda拉取实例时添加标签过滤条件即可
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

