← 中文资源

简体中文版本

按队列积压年龄告警

使用 ApproximateAgeOfOldestMessage 配置 CloudWatch 告警,在队列深度暴涨前发现消费者停滞。

阅读英文原文

概述

队列深度同时受到达速率和处理速率影响。低流量时,完全停摆的消费者可能要一小时才越过固定深度阈值。消息年龄衡量真实的用户影响,即最老消息已经等待多久。300 秒的年龄阈值可以在五分钟内发现停滞,与流量大小无关。

步骤

  1. 创建主告警,使用五个一分钟周期避免抖动,并把缺失数据视为 breaching:
aws cloudwatch put-metric-alarm \
  --alarm-name orders-queue-oldest-age \
  --namespace AWS/SQS \
  --metric-name ApproximateAgeOfOldestMessage \
  --dimensions Name=QueueName,Value=orders-processing \
  --statistic Maximum --period 60 --evaluation-periods 5 \
  --threshold 300 --comparison-operator GreaterThanThreshold \
  --treat-missing-data breaching \
  --alarm-actions arn:aws:sns:us-east-1:123456789012:oncall-pager
  1. 保留一个深度告警作为突发流量的辅助保护,阈值可设为 10000。
  2. 暂停消费者并发送一条测试消息,验证告警在约五分钟后进入 ALARM、SNS 能触达值班。
  3. 在告警描述中加入 runbook 链接和消费者名称。

验证

预期暂停消费者后年龄持续上升并触发告警,恢复消费者后回到 OK。若消费者停摆但告警仍为 OK,检查是否未设置 TreatMissingData,指标缺口会被默认当作健康。改名队列后要重新验证,旧告警会静默失效。

注意事项

  • 该指标为近似值,更新粒度较粗,不适合秒级判断。
  • 告警只能说明队列停滞,不能指出具体是哪个消费者实例,需要结合消费者指标排查。
  • 阈值应高于正常处理延迟的 p99;正常高峰频繁抖动时,增加评估周期而不是盲目提高阈值。
  • 深度告警与年龄告警配合使用:前者覆盖突发,后者覆盖缓慢堆积。