You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CloudWatch告警ALARM状态下获取当前阈值?求分级告警替代方案

问题描述

现有以下Terraform配置的EC2 CPU利用率CloudWatch告警(阈值80%):

resource "aws_cloudwatch_metric_alarm" "ec2-high-cpu-alarm" {
  count                = length(local.monitor_instance_tags)
  
  alarm_name           = "ec2-high-cpu-alarm-for-${local.monitor_instance_tags[count.index]}"
  comparison_operator  = "GreaterThanOrEqualToThreshold"
  evaluation_periods   = "1"
  metric_name          = "CPUUtilization"
  namespace            = "AWS/EC2"
  period               = var.alarm_monitor_period
  statistic            = "Average"
  threshold            = "80"
  alarm_description    = "This metric monitors ec2 cpu utilization exceeding 80%"
  dimensions           = { 
    InstanceId = local.monitor_instance_ids[count.index]
  }

  alarm_actions       = local.alarm_notify_actions
  ok_actions          = local.alarm_notify_actions
  insufficient_data_actions = []
  actions_enabled           = true
}

需求:当CPU利用率处于80%-90%时接收WARNING通知,超过90%时接收CRITICAL ALARM通知。但CloudWatch仅支持OK、INSUFFICIENT_DATA、ALARM三种状态,无原生WARNING状态。

核心问题:

  • 如何在ALARM状态触发时获取当前告警的阈值,从而在通知消息中添加WARNING/CRITICAL标签?
  • 如果无法在告警创建阶段实现,有没有不需要为同一指标创建多个告警的替代方案?
解决方案

一、在ALARM状态中获取阈值的方法

CloudWatch告警触发的通知(如SNS消息)会包含告警元数据,其中Trigger字段下的Threshold就是当前告警的阈值。你可以在通知接收端(如Lambda函数)解析该值,结合实际CPU利用率判断通知等级:

  1. 当实际利用率≥80%且<90%时,标记为WARNING
  2. 当实际利用率≥90%时,标记为CRITICAL ALARM

示例SNS消息关键字段:

{
  "AlarmName": "ec2-high-cpu-alarm-for-instance-xxx",
  "Trigger": {
    "Threshold": 80.0,
    "MetricName": "CPUUtilization",
    "Namespace": "AWS/EC2"
  },
  "NewStateReason": "Threshold Crossed: 1 datapoint [85.0 (12/01/24 10:00:00)] was greater than or equal to the threshold (80.0)."
}

你可以从NewStateReason中提取实际CPU数值,或调用CloudWatch API查询对应时间点的指标数据,再结合阈值完成判断。

二、无需多告警的替代方案

通过单告警+Lambda处理通知的方式实现分级通知,无需创建多个告警:

  1. 保留原有告警,将阈值设为80%,把alarm_actions指向Lambda函数(而非直接指向SNS主题)
  2. Lambda函数接收CloudWatch告警事件后,解析实际CPU利用率:
    • 用正则从NewStateReason字段提取数值(如匹配\[(\d+\.\d+))
    • 或调用get-metric-statistics API查询实例对应时间段的CPU数据
  3. 根据数值范围发送对应等级的通知:
    • 80% ≤ 利用率 <90%:发送带WARNING标签的消息到通知渠道
    • 利用率 ≥90%:发送带CRITICAL ALARM标签的消息到通知渠道
  4. Lambda可配置将不同等级消息发送到同一或不同SNS主题,再推送给用户。

这种方式只需维护一个CloudWatch告警,通过后端处理实现分级通知,避免冗余配置。

内容的提问来源于stack exchange,提问作者mkRuby009

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:05:48