SLI 选型是什么
SLI(服务等级指标)要按服务形态挑选,不能一套指标套到底:请求型服务看成功率与延迟,任务型服务看按时完成率与处理时延,存储型看读写可用性与延迟,流式管道看端到端时延与完整性。选错 SLI 的后果是与用户感知脱节——指标一直达标,用户却在抱怨慢,因为被测量到的根本不是用户关心的那件事。
基本信息
| 请求型 | 成功率、延迟分位数、吞吐 |
|---|---|
| 任务型 | 按时完成率、任务排队时长、失败重试次数 |
| 存储型 | 读写成功率、读写延迟、持久性保障 |
| 流式 | 端到端时延、消息完整性、消费滞后 |
典型使用场景
- 对外接口:用成功率与延迟分位数作为核心 SLI
- 后台批处理:用按时完成率衡量,而不是看接口成功率
- 数据库与对象存储:用读写成功率与延迟衡量,关注持久性
- 消息管道:用端到端时延衡量数据是否及时到达
- SLO 制定:先确定 SLI 类型,再定目标值与统计窗口
任务型服务的时效 SLI
任务型服务的时效 SLI
# 1 小时内完成的任务占比(目标 99%)
sum(rate(jobs_finished_total{latency_bucket="lte_1h"}[30d]))
/ sum(rate(jobs_finished_total[30d]))
# 请求型服务的成功率(按 5 分钟窗口观察,按 30 天窗口结算)
sum(rate(http_requests_total{code!~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))
# 存储型服务的读写成功率
sum(rate(db_operations_total{result="success"}[5m]))
/ sum(rate(db_operations_total[5m]))
# 统计窗口要写进口径文档,否则达成率无法跨周期比较服务类型与 SLI
| 服务类型 | 健康 SLI | 参考口径 |
|---|---|---|
| 请求型(接口与页面) | 成功率、P95 延迟 | 成功请求数除以总请求数 |
| 任务型(批处理与队列) | 按时完成率、任务时延 | 准时完成任务数除以应完成任务数 |
| 存储型(数据库与对象存储) | 可用性、读写延迟 | 读写请求成功率 |
| 流式(消息管道) | 端到端时延、完整率 | 写入到消费的时间差 |
| (反例) | 只看进程存活 | 进程在跑但业务已经失败 |
同一系统可以有多个 SLI,但要控制数量:每个 SLI 都应能驱动改进决策,指标太多会让谁都记不住、也没人为达成率负责。
SLI 的统计窗口与目标值要一起定义:同样的成功率,按 7 天和按 30 天统计得到的达成率差异明显,口径变更需要记录在案。