概述
队列深度同时受到达速率和处理速率影响。低流量时,完全停摆的消费者可能要一小时才越过固定深度阈值。消息年龄衡量真实的用户影响,即最老消息已经等待多久。300 秒的年龄阈值可以在五分钟内发现停滞,与流量大小无关。
步骤
- 创建主告警,使用五个一分钟周期避免抖动,并把缺失数据视为 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
- 保留一个深度告警作为突发流量的辅助保护,阈值可设为 10000。
- 暂停消费者并发送一条测试消息,验证告警在约五分钟后进入 ALARM、SNS 能触达值班。
- 在告警描述中加入 runbook 链接和消费者名称。
验证
预期暂停消费者后年龄持续上升并触发告警,恢复消费者后回到 OK。若消费者停摆但告警仍为 OK,检查是否未设置 TreatMissingData,指标缺口会被默认当作健康。改名队列后要重新验证,旧告警会静默失效。
注意事项
- 该指标为近似值,更新粒度较粗,不适合秒级判断。
- 告警只能说明队列停滞,不能指出具体是哪个消费者实例,需要结合消费者指标排查。
- 阈值应高于正常处理延迟的 p99;正常高峰频繁抖动时,增加评估周期而不是盲目提高阈值。
- 深度告警与年龄告警配合使用:前者覆盖突发,后者覆盖缓慢堆积。