0Pricing
AWS Solutions Architect · 课时

CloudWatch 警报与复合警报

设置基于阈值的警报以触发自动扩展或 SNS 通知,并将多个警报组合为复合警报以减少告警噪声

CloudWatch 警报与复合警报 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。

什么是 CloudWatch Alarm?

CloudWatch alarm 会在您指定的时间段内监控单个指标,或监控指标数学表达式的结果。当指标越过您定义的阈值时,alarm 会改变状态,并可自动触发操作,例如发送 SNS 通知、扩展 Auto Scaling 组、停止 EC2 实例或执行 Systems Manager OpsItem。Alarms 是 AWS 中实现自动化运维响应的主要机制。

Alarm 状态

CloudWatch alarm 始终处于以下三种状态之一:OK — 指标处于定义的阈值范围内;ALARM — 指标在要求数量的评估周期内超过了阈值;INSUFFICIENT_DATA — alarm 刚刚创建、指标不可用,或目前收集到的数据还不足。在状态之间转换时,会触发为该状态变化配置的操作 — 您可以分别为 OK、ALARM 和 INSUFFICIENT_DATA 状态设置不同的 SNS 主题。

# View all alarms and their current state
aws cloudwatch describe-alarms \
  --query 'MetricAlarms[].{Name:AlarmName,State:StateValue,Metric:MetricName}' \
  --output table

# List only alarms currently in ALARM state
aws cloudwatch describe-alarms \
  --state-value ALARM \
  --query 'MetricAlarms[].AlarmName'

创建 CloudWatch Alarm

创建 alarm 时,您需要指定:指标及命名空间、统计值(Average、Sum、Maximum 等)、周期(以秒为单位评估指标的频率)、评估周期数(必须连续超过阈值的周期数)、阈值以及比较运算符。当指标在指定数量的连续评估周期内超过阈值时,alarm 就会触发。

# Create an alarm: trigger when CPU > 70% for 2 consecutive 5-min periods
aws cloudwatch put-metric-alarm \
  --alarm-name HighCPUAlarm \
  --alarm-description 'Trigger when EC2 CPU exceeds 70%' \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --dimensions Name=InstanceId,Value=i-0123456789abcdef0 \
  --statistic Average \
  --period 300 \
  --evaluation-periods 2 \
  --threshold 70 \
  --comparison-operator GreaterThanThreshold \
  --alarm-actions arn:aws:sns:us-east-1:111122223333:AlertTeam

Alarm 操作:SNS、Auto Scaling、EC2

Alarm 操作可以指向多个目标:Amazon SNS 主题(用于发送电子邮件、SMS 或触发 Lambda)、Auto Scaling 策略(用于扩展或缩减 ASG)以及 EC2 操作(用于停止、终止、重启或恢复 EC2 实例)。对于每种状态(OK、ALARM、INSUFFICIENT_DATA),您都可以指定不同的操作集 — 例如,在 ALARM 状态下通知团队,在恢复为 OK 时发送恢复通知,并在 INSUFFICIENT_DATA 状态下发出警报以发现监控缺口。

# Alarm that stops an idle EC2 instance when CPU < 1% for 30 min
aws cloudwatch put-metric-alarm \
  --alarm-name LowCPUStopInstance \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --dimensions Name=InstanceId,Value=i-0123456789abcdef0 \
  --statistic Average \
  --period 300 \
  --evaluation-periods 6 \
  --threshold 1 \
  --comparison-operator LessThanThreshold \
  --alarm-actions arn:aws:swf:us-east-1:111122223333:action/actions/AWS_EC2.InstanceId.Stop/1.0

缺失数据处理

当 CloudWatch 评估 alarm 时,如果部分数据点缺失,您必须决定如何处理这些数据。可选项包括:notBreaching(将缺失数据视为未超过阈值 — 如果其他数据正常,alarm 保持 OK)、breaching(将缺失数据视为超过阈值 — alarm 转为 ALARM)、ignore(alarm 状态不变)以及 missing(alarm 转为 INSUFFICIENT_DATA)。选择错误的选项会导致误报或无声故障,这是 SAA-C03 考试中的一个重要细节。

# Set missing data treatment on an alarm
aws cloudwatch put-metric-alarm \
  --alarm-name WebsiteLatencyAlarm \
  --metric-name TargetResponseTime \
  --namespace AWS/ApplicationELB \
  --statistic Average \
  --period 60 \
  --evaluation-periods 3 \
  --threshold 2.0 \
  --comparison-operator GreaterThanThreshold \
  --treat-missing-data breaching \
  --alarm-actions arn:aws:sns:us-east-1:111122223333:Ops

Alarm 分辨率与评估周期

alarm 分辨率等于周期 × 评估周期数。例如,周期为 60 秒、评估周期数为 5,表示 alarm 会考虑连续 5 个一分钟数据点。默认情况下,只有当全部五个周期都超过阈值时,alarm 才会转为 ALARM。您可以配置 datapoints-to-alarm,要求 N 个周期中的 M 个超过阈值 — 例如5 个周期中有 3 个 — 从而减少短暂峰值造成的误报。

# Alarm that requires 3 out of 5 periods to breach (reduces false positives)
aws cloudwatch put-metric-alarm \
  --alarm-name CPUSpike \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --dimensions Name=AutoScalingGroupName,Value=my-asg \
  --statistic Average \
  --period 60 \
  --evaluation-periods 5 \
  --datapoints-to-alarm 3 \
  --threshold 80 \
  --comparison-operator GreaterThanThreshold \
  --alarm-actions arn:aws:autoscaling:us-east-1:111122223333:scalingPolicy:...

复合 Alarms:组合多个 Alarms

复合 alarm 使用布尔逻辑(AND、OR、NOT)评估多个其他 alarm 的状态。只有当其规则表达式的计算结果为 true 时,它才会进入 ALARM 状态。复合 alarms 可用于减少警报噪声 — 例如,只有在高 CPU 和高延迟 alarms 同时触发时才发出警报,因为仅有高 CPU 可能是批处理期间可接受的情况。您还可以使用复合 alarms 在维护时段内抑制子 alarms。

# Create a composite alarm (alerts only when BOTH CPU and latency are high)
aws cloudwatch put-composite-alarm \
  --alarm-name HighLoadComposite \
  --alarm-rule 'ALARM("HighCPUAlarm") AND ALARM("HighLatencyAlarm")' \
  --alarm-actions arn:aws:sns:us-east-1:111122223333:CriticalOps \
  --alarm-description 'Alert only when both CPU and latency are elevated'

使用复合 Alarms 抑制 Alarm

复合 alarms 支持alarm 抑制操作 — 您可以将复合 alarm 配置为在计划内维护期间抑制其子 alarms。例如,在部署时段内,您可以设置一个将 'MaintenanceMode' alarm 与 OR 逻辑结合的复合 alarm,在维护处于活动状态时抑制所有子 alarm 通知。当您为升级而主动使服务下线时,这可以避免警报大量涌入。

# Composite alarm with suppression: alert UNLESS maintenance is active
aws cloudwatch put-composite-alarm \
  --alarm-name ProductionAlerts \
  --alarm-rule 'ALARM("HighCPUAlarm") AND NOT ALARM("MaintenanceModeAlarm")' \
  --alarm-actions arn:aws:sns:us-east-1:111122223333:ProductionOps

与 Auto Scaling 策略集成

Auto Scaling 组使用 CloudWatch alarms 作为分步扩展和简单扩展策略的触发器。当 alarm 进入 ALARM 状态时,扩展策略就会执行。对于分步扩展,您可以为不同的阈值范围定义多个扩展调整 — 例如,当 CPU 为 70%–80% 时增加 1 个实例,为 80%–90% 时增加 3 个实例,超过 90% 时增加 5 个实例。Alarm 会根据评估时的超阈值程度触发第一个适用的步骤。

# Create a scale-out alarm linked to an ASG scaling policy
aws cloudwatch put-metric-alarm \
  --alarm-name ScaleOutTrigger \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --dimensions Name=AutoScalingGroupName,Value=my-asg \
  --statistic Average \
  --period 60 \
  --evaluation-periods 2 \
  --threshold 70 \
  --comparison-operator GreaterThanThreshold \
  --alarm-actions arn:aws:autoscaling:us-east-1:111122223333:scalingPolicy:POLICY_ARN

CloudWatch 计费 Alarms

您可以在 CloudWatch 中创建计费 alarms,以便在预计 AWS 费用超过阈值时收到通知。计费指标仅在 us-east-1 区域发布(无论您的资源运行在哪个位置),并且大约每 6 小时更新一次。要启用计费 alarms,您必须先在 AWS Billing 控制台中开启Billing Alerts。更精确的工具是 AWS Budgets,但 CloudWatch 计费 alarms 仍是考试中会考查的有效选项。

# Create a billing alarm for $100 threshold
aws cloudwatch put-metric-alarm \
  --region us-east-1 \
  --alarm-name MonthlyBillingAlert \
  --alarm-description 'Alert when estimated charges exceed $100' \
  --metric-name EstimatedCharges \
  --namespace AWS/Billing \
  --dimensions Name=Currency,Value=USD \
  --statistic Maximum \
  --period 86400 \
  --evaluation-periods 1 \
  --threshold 100 \
  --comparison-operator GreaterThanThreshold \
  --alarm-actions arn:aws:sns:us-east-1:111122223333:BillingAlerts

测试和监控 Alarms

您可以使用 set-alarm-state 命令手动设置 alarm 状态,无需等待真实的阈值超出即可测试 alarm 操作。这对于验证 SNS 主题、Auto Scaling 策略和 Lambda 函数是否正确响应非常有用。在依赖 alarms 进行生产环境警报之前,请始终在非生产环境中测试 alarm 操作,并确认 SNS 主题已确认正确的电子邮件订阅。

# Manually trigger an alarm for testing (does NOT persist — reverts on next evaluation)
aws cloudwatch set-alarm-state \
  --alarm-name HighCPUAlarm \
  --state-value ALARM \
  --state-reason 'Testing alarm action'

# Watch alarm state history
aws cloudwatch describe-alarm-history \
  --alarm-name HighCPUAlarm \
  --history-item-type StateUpdate \
  --query 'AlarmHistoryItems[].{Time:Timestamp,Summary:HistorySummary}'

快速检查

测试您对本课 AWS Solutions Architect(SAA-C03)概念的理解。

课程回顾

本课介绍了:alarms 有三种状态(OK、ALARM、INSUFFICIENT_DATA),并且可以触发 SNS、Auto Scaling 和 EC2 操作;datapoints-to-alarm 支持 M-of-N 评估,从而减少误报;复合 alarms 使用布尔逻辑组合多个 alarms 并抑制警报噪声。接下来,我们将学习 CloudWatch Logs 和 Log Insights,以了解集中式日志管理。

常见问题解答

「CloudWatch 警报与复合警报」课时是免费的吗?

是的 — 「CloudWatch 警报与复合警报」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。

「CloudWatch 警报与复合警报」这节课中我会学到什么?

设置基于阈值的警报以触发自动扩展或 SNS 通知,并将多个警报组合为复合警报以减少告警噪声 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AWS Solutions Architect 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「CloudWatch 警报与复合警报」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AWS Solutions Architect 课中编写并运行代码吗?

能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. CloudWatch 指标、命名空间与维度
  2. CloudWatch 警报与复合警报
  3. CloudWatch 日志与日志洞察
  4. CloudWatch 控制面板与容器洞察
← 返回 AWS Solutions Architect