3. SLO台账设计原则:台账字段设计
SLO台账是Error Budget管理的核心载体,其字段设计直接决定了故障排查的效率和准确性。一个设计良好的台账,应当让SRE在5分钟内定位到“哪个SLI在消耗预算、消耗速率是否异常、是否需要触发告警”。本章围绕台账的五个关键字段展开:SLI类型、目标值、窗口期、当前消耗率、告警阈值。
3.1 字段总览与设计原则
台账字段设计遵循“可量化、可追溯、可预警”三大原则。每个字段必须服务于一个具体的运维决策场景,避免冗余字段。下表列出五个核心字段及其设计要点:
| 字段名称 | 设计目的 | 常见取值/格式 | 故障排查中的作用 |
|---|---|---|---|
| SLI类型 | 明确衡量对象(可用性、延迟、吞吐量等) | availability / latency / throughput / correctness | 快速区分故障类型:是服务不可用,还是性能劣化 |
| 目标值 | 定义“好”与“坏”的边界 | 99.9% / 99.99% / 100ms (p99) | 计算Error Budget总量,判断剩余预算是否充足 |
| 窗口期 | 设定预算累积的时间范围 | 30d / 7d / 1d | 决定预算消耗的平滑程度,影响告警灵敏度 |
| 当前消耗率 | 实时监控预算消耗速度 | 0.05%/h / 1.2%/d | 判断当前故障是否在加速消耗预算 |
| 告警阈值 | 设定触发告警的预算消耗水位 | 70% / 90% / 100% | 提前预警,避免预算耗尽导致SLO违约 |
3.2 SLI类型:定义“好”的衡量标准
SLI类型是台账的“主语”,决定了后续所有字段的计算基础。常见的SLI类型包括:
- 可用性(Availability):请求成功数 / 总请求数。适用于核心API、数据库、网关。
- 延迟(Latency):通常以p50、p95、p99分位值衡量。适用于用户感知敏感的服务。
- 吞吐量(Throughput):每秒请求数(RPS)或每秒处理事件数(EPS)。适用于批处理、流处理系统。
- 正确性(Correctness):数据一致率、计算准确率。适用于交易、计费、数据管道。
设计原则:一个SLO只绑定一个SLI类型。混合类型(如“可用性+延迟”)会导致Error Budget计算逻辑混乱,无法定位根因。
3.3 目标值:设定Error Budget的“总预算”
目标值决定了Error Budget的总量。例如,目标值99.9%意味着在窗口期内允许0.1%的“坏”事件。目标值的设计需考虑:
- 业务容忍度:核心交易链路目标值应高于99.99%,非关键服务可设为99.9%。
- 技术可行性:目标值越高,对基础设施的冗余要求越高,成本呈指数增长。
- 用户感知:目标值应反映真实用户体验,而非理想值。
目标值在台账中通常以百分比或具体数值(如延迟阈值)存储,并作为Error Budget计算的基准线。
3.4 窗口期:控制预算消耗的“时间尺度”
窗口期定义了Error Budget的累积周期。常见窗口期及其适用场景:
| 窗口期 | 特点 | 适用场景 | 故障排查影响 |
|---|---|---|---|
| 30天(滚动) | 平滑短期波动,反映长期趋势 | 核心服务、对外SLA承诺 | 故障影响会被稀释,适合慢性问题排查 |
| 7天(滚动) | 平衡灵敏度与稳定性 | 内部服务、中等关键度 | 能较快反映近期故障,适合周级复盘 |
| 1天(固定) | 高灵敏度,快速反映故障 | 实验性服务、发布验证 | 故障立即体现在预算消耗中,适合快速告警 |
设计原则:窗口期应与业务复盘的频率对齐。例如,月度SLA承诺的服务使用30天窗口,而发布验证阶段使用1天窗口。
3.5 当前消耗率:实时监控预算“燃烧速度”
当前消耗率是台账中最动态的字段,计算公式为:
当前消耗率 = (窗口期内已消耗的Error Budget) / (窗口期总时间) × 100%
消耗率通常以“%/小时”或“%/天”为单位。在故障排查中,消耗率的变化趋势比值更重要:
- 消耗率突增:通常对应突发故障,需立即响应。
- 消耗率缓慢上升:可能对应资源泄漏、慢查询等慢性问题。
- 消耗率持续为0:可能SLI采集异常或目标值设置过低。
3.6 告警阈值:设置预算消耗的“警戒水位”
告警阈值定义了触发通知的预算消耗水位。常见阈值设计模式:
| 阈值级别 | 消耗水位 | 响应动作 | 示例 |
|---|---|---|---|
| 警告(Warning) | 70% | 创建Jira工单,通知值班SRE | Error Budget剩余30%,需关注趋势 |
| 严重(Critical) | 90% | 触发PagerDuty告警,立即介入 | Error Budget即将耗尽,需紧急止损 |
| 违约(Breach) | 100% | 启动故障复盘,触发SLA违约流程 | Error Budget已耗尽,SLO已违反 |
设计原则:告警阈值应预留足够的响应时间。例如,若消耗率为1%/h,从70%到100%有30小时响应窗口;若消耗率为5%/h,则只有6小时,需考虑更激进的阈值(如50%警告)。
3.7 台账字段关系图
下图展示了五个字段之间的逻辑关系,以及它们在Error Budget消耗分析中的协作流程:
3.8 字段设计避坑指南
根据实际运维经验,以下为台账字段设计中的常见错误及改进建议:
- 错误1:SLI类型过于笼统。例如只写“性能”,未区分延迟和吞吐量。应拆分为独立的SLO台账。
- 错误2:目标值设置过高或过低。99.999%的目标值会导致Error Budget过小,频繁触发告警;99%的目标值则可能掩盖真实故障。
- 错误3:窗口期与告警阈值不匹配。30天窗口下使用10%告警阈值,会导致告警过于敏感;1天窗口下使用90%阈值,则响应时间不足。
- 错误4:当前消耗率未归一化。不同窗口期的消耗率不能直接比较,应统一换算为“%/小时”或“%/天”。
- 错误5:告警阈值固定不变。未考虑业务高峰期(如大促)的消耗率变化,应引入动态阈值或分时段阈值。
3.9 台账字段设计检查清单
在创建或评审SLO台账时,可使用以下清单逐项确认:
- SLI类型:是否明确且唯一?是否与监控指标一一对应?
- 目标值:是否基于历史数据或业务需求设定?是否留有合理余量?
- 窗口期:是否与SLA承诺周期一致?是否考虑了故障恢复时间?
- 当前消耗率:计算逻辑是否清晰?是否支持实时更新?
- 告警阈值:是否设置了多级阈值?是否预留了足够的响应时间?
- 字段联动:各字段之间是否存在逻辑冲突?例如,窗口期过短但目标值过高,导致Error Budget几乎为0。
通过以上设计原则和检查清单,SRE团队可以构建出清晰、可操作的SLO台账,为后续的Error Budget消耗分析和故障排查奠定坚实基础。