容量告警
在容量耗尽(余量、饱和、增长率)成宕机前告警。
为什么
宕机告警("服务挂")在损害后触发 — 客户已在失败。容量告警("余量 < 10%"、"DB 池 80% 满"、"盘 90%")在损害前触发,给你数分钟到数小时在客户受影响前扩或修。这是从反应性到前瞻性运维的转:按先导指标(利用、饱和、增长率)告警非滞后(错误、延迟)。三容量信号是:利用(CPU 70%、盘 80%)、饱和(队列深长、DB 池 等)和增长率(流量月增 20%、2 周内撞天花板)。三者都告警,带够前导时间行动 — "盘 90%"给你数小时、"盘 99%"给你数分钟、"盘满"给你宕机。按容量告警的团队报影响客户事件少 70%,因他们在坏任何东西前修容量问题。
何时使用
总是。在所有关键资源上设给行动前导时间的容量告警阈值。
如何做
1. 按利用告警(基本信号) - CPU >70% 持续 5m → 警;>85% 持续 2m → page - 内存 >80% → 警;>90% → page(OOM 迫) - 盘 >80% → 警;>90% → page(盘满 = 服务挂) 2. 按饱和告警(长信号) - 队列深长(现深 > 5m 前深 2x)→ 警 - DB 池等(wait_time > 100ms)→ 警;>500ms → page - 线程池耗尽(拒任务 > 0)→ page 3. 按增长率告警(预测信号) - 流量周增 >20% → 警(若趋势续将撞天花板) - 盘用日增 >5% → 警(N 天内满) - DB 大小月增 >10% → 警(将撞存储限) 4. 设带前导时间阈值 - 盘 80% → 10%/天 2 天满 → 警(时行动) - 盘 90% → 1 天满 → page(立即行动) - 别设 99% — 那 1 小时满,前导时间不足 5. 把容量告警路由到正确响应者 - 盘 → 平台队(加存或清理) - DB 池 → DB 队(提池或调查询) - 流量增 → 服务队(扩或调查增长因)
示例
# 容量告警(Prometheus):
groups:
- name: capacity
rules:
# 1. 利用(基本)
- alert: CheckoutCPUHigh
expr: avg(rate(cpu_usage[5m])) > 0.70
for: 5m
labels: { severity: warn, team: payments }
- alert: CheckoutCPUCritical
expr: avg(rate(cpu_usage[5m])) > 0.85
for: 2m
labels: { severity: page, team: payments }
# 2. 饱和(长)
- alert: CheckoutQueueGrowing
expr: queue_depth > 2 * queue_depth offset 5m
labels: { severity: warn, team: payments }
- alert: DbPoolWaiting
expr: db_pool_wait_time_ms > 500
for: 1m
labels: { severity: page, team: db-platform }
# 3. 增长率(预测)
- alert: DiskFillingFast
expr: deriv(disk_usage[1d]) > 0.05 # >5%/天
labels: { severity: warn, team: platform }
annotations:
summary: "盘 >5%/天填 — {{ $value }} 天内满"
- alert: TrafficGrowingFast
expr: rate(http_requests[1w]) > 1.2 # >20% 周增
labels: { severity: warn, team: payments }
annotations:
summary: "流量 >20% 周增 — 查容量 vs 天花板"
# 前导时间:
# 盘 80% 5%/天 → 4 天满 → 警(4 天前导)
# 盘 90% 5%/天 → 2 天满 → page(2 天前导)
# 盘 95% 5%/天 → 1 天满 → page(1 天前导,立即行动)常见问题
- ⚠仅宕机告警无容量告警 — 客户失败时才知;按利用/饱和/增长告警取前导时间。
- ⚠阈值 99% — 1 小时满,前导时间不足;设 80%(警)和 90%(page)取数天前导。
- ⚠无增长率告警 — 流量月增 20% 且 2 周撞天花板无警;按趋势告警非仅当前值。
- ⚠所有容量告警一队 — 盘告警给无法加存的 app 队;按资源路由给能修的队。
最佳实践
- ✓按全三容量信号告警:利用(CPU/盘 %)、饱和(队列/池等)、增长率(流量/盘长)。
- ✓设带前导时间阈值:盘 80% 警(数天满)、90% page(立即行动);别设 99% — 那是宕机非容量告警。
- ✓按增长率(1d/1w 导数)告警以数周前预测撞天花板;趋势是早期警告。
- ✓按资源把容量告警路由给能修的队(盘 → 平台、DB 池 → DB 队、流量 → 服务队)。