4. GameDay 演练规划:演练场景设计、容量基线确定、预期水位阈值设定
GameDay 演练的核心目标是通过模拟真实故障场景,验证容量水位监控的有效性、告警链路的可靠性以及应急响应流程的完备性。本章聚焦于演练前的规划阶段,明确“练什么、基线在哪、阈值怎么定”三个关键问题。
4.1 演练场景设计
场景设计应基于历史故障、容量瓶颈和业务峰值特征,避免“为演练而演练”。推荐采用以下三类场景模板:
| 场景类型 | 典型触发条件 | 预期影响范围 | 演练目标 |
|---|---|---|---|
| 流量突增 | CPU / 请求量 / 连接数 在 5 分钟内线性增长 200% | 单集群 → 上游 LB → 下游缓存 | 验证自动扩缩容策略与限流降级 |
| 资源降级 | 模拟节点宕机 / 磁盘 IO 限速 / 网络延迟 100ms | 局部服务 → 依赖链雪崩 | 测试熔断、重试与优雅降级 |
| 数据积压 | 消息队列堆积量 10 分钟内超过 100 万条 | 消费者组 → 数据库写入 → 报表延迟 | 检查消费能力与背压机制 |
设计建议: 每个 GameDay 只聚焦 1 个场景,避免多故障叠加导致根因难以定位。场景脚本需包含“注入方式”、“持续时间”、“预期行为”和“回滚方案”。
4.2 容量基线确定
容量基线是判断“是否异常”的参考坐标系。基线数据应取自过去 30 天同一时间窗口的 P50 / P95 / P99 统计值,并排除已知故障时段。
- 计算口径: 按业务高低峰时段分别聚合,例如 10:00-12:00 为高峰窗口,02:00-05:00 为低谷窗口。
- 关键指标: CPU 使用率、内存使用率、磁盘 IOPS、网络吞吐量、请求延迟 P99、队列深度。
- 基线存储: 在 Grafana 中通过
avg_over_time(metric[30d])或引用外部时序数据库的基线表。
# PromQL 示例:计算过去 30 天同一小时 CPU 使用率的 P95 基线
quantile_over_time(0.95,
node_cpu_seconds_total{mode="user"}[30d]
) by (instance)
常见误区: 直接使用全量历史数据的平均值作为基线,会掩盖业务周期性特征。必须按“星期几 + 小时”分桶,例如“周一 10:00 的 P95 CPU”。
4.3 预期水位阈值设定
阈值设定采用“基线 + 偏移量”模型,而非固定值。偏移量根据业务容忍度分为三级:
| 水位等级 | 阈值公式 | Grafana 告警颜色 | 响应动作 |
|---|---|---|---|
| Warning | 基线 P95 × 1.2 | 黄色 | 通知值班 SRE,人工确认 |
| Critical | 基线 P95 × 1.5 | 红色 | 触发自动扩缩容 / 限流 |
| Emergency | 基线 P99 × 1.5 | 深红 | 启动应急预案,切换流量 |
在 GameDay 演练中,需提前在 Grafana 面板上标注“预期水位线”,以便演练过程中实时对比实际水位与预期阈值的偏差。
4.4 演练规划流程总览
以下 SVG 图展示了从场景设计到阈值设定的完整规划流程,以及各环节之间的输入输出关系。
4.5 演练前 Checklist
在正式执行 GameDay 前,建议逐项确认以下准备项:
- 场景脚本已评审: 确认注入方式不会影响生产环境(若为生产演练需有隔离措施)。
- 基线数据已加载: Grafana 面板中已配置基线参考线,且数据源可正常查询。
- 阈值已生效: 告警规则已启用,通知渠道(钉钉/邮件/PagerDuty)已验证。
- 回滚方案就绪: 演练终止条件明确,回滚脚本或操作手册可立即执行。
- 观察者就位: 至少 1 人负责监控 Grafana 面板,1 人负责记录时间线。
演练纪律: 演练期间禁止修改告警规则或基线配置,所有变更需在演练结束后通过变更流程执行。演练记录应包含“预期水位 vs 实际水位”的对比截图,作为后续容量规划的依据。