SRE:SLI、SLO 与错误预算
SRE 的目标不是追求所有服务永远 100% 可用,而是用用户可感知的指标定义可靠性目标,并在可靠性与发布速度之间做可执行的取舍。
一、三个核心概念
- SLI:服务水平指标,实际测量值,例如成功请求比例、延迟达标比例或数据新鲜度。
- SLO:服务水平目标,在时间窗口内希望 SLI 达到的水平。
- 错误预算:允许未达到理想状态的空间,通常为
1 - SLO。
SLA 是面向客户的正式承诺,可能包含赔偿或合同责任;SLO 是内部可靠性目标,两者不能混为一谈。
二、从用户旅程选择 SLI
不要只把 CPU、内存和进程存活当作 SLI。先列出用户真正要完成的动作,例如登录、提交订单、查询结果或上传文件,再定义:
- 好事件是什么;
- 总事件是什么;
- 从哪里测量;
- 哪些错误属于服务责任;
- 如何处理超时、取消和重试。
可用性示例:
SLI = 成功且在时限内完成的有效请求数 / 全部有效请求数
延迟目标应使用“达标请求比例”,不只看平均值。平均值会掩盖尾部慢请求。
三、SLO 示例
“过去 28 天,登录请求中至少 99.9% 在 800 毫秒内成功完成。”
一个完整 SLO 应包含:服务和用户、事件定义、阈值、统计窗口、数据源、排除项与负责人。目标不能脱离历史数据和业务价值拍脑袋设定。
四、错误预算如何使用
当服务消耗错误预算过快时,可以暂停高风险发布,优先修复可靠性、测试和容量问题;预算充足时,可允许更多实验和交付。错误预算政策应由产品、开发和运维共同认可。
它不是“允许制造故障”,也不是处罚团队的工具。其作用是把“稳定一点”和“发版快一点”的争论转成共同规则。
五、燃烧率告警
仅在月末发现 SLO 失守太晚。燃烧率表示错误预算被消耗的速度:
- 短窗口高燃烧率用于发现快速重大故障;
- 长窗口较低燃烧率用于发现持续慢性问题;
- 多窗口组合可降低偶发尖峰带来的噪声。
告警应指向用户影响、值班动作和排障入口,而不是为每个内部指标单独报警。
六、落地步骤
- 选一个边界清楚、用户重要的服务。
- 用历史数据计算候选 SLI,检查缺失、偏差和采样问题。
- 与业务共同确定可实现且有价值的 SLO。
- 建立错误预算看板和多窗口燃烧率告警。
- 编写错误预算政策,明确何时暂停发布、谁来决定以及恢复条件。
- 每月复核目标、数据质量和用户体验变化。
七、常见误区
- 目标全部设为 100%,导致无预算且难以执行。
- 只监控服务端成功,忽略用户端超时和依赖失败。
- 把计划维护全部排除,使指标比真实体验好看。
- SLI 数据来自与业务路径无关的健康检查。
- 告警数量很多,却没有对应的处理动作和负责人。
- SLO 设定后从不复核,业务变化后仍沿用旧目标。
八、验收清单
- SLI 可由原始数据重复计算;
- SLO 对应具体用户旅程和时间窗口;
- 错误预算政策获得产品、研发和运维共同认可;
- 燃烧率告警经过历史故障回放;
- 复盘行动能改善 SLI 或降低预算消耗;
- 看板同时展示当前表现、预算剩余和趋势。