2. SLI 口径定义五大原则详解

SLI(Service Level Indicator,服务等级指标)是可靠性工程的量化基石。一个定义不当的 SLI 会导致误判、告警风暴或盲区。业界公认的 SLI 口径定义需遵循五大原则:明确、可测量、面向用户、可区分好坏、可自动化采集。以下逐一展开工程解析。

2.1 原则一:明确(Unambiguous)

口径必须消除歧义,不同团队(SRE、开发、产品)对同一指标的理解应完全一致。模糊的口径是可靠性评审中最大的风险源。

反例(模糊) 正例(明确)
“接口响应时间” “从客户端发起 HTTP GET 请求到收到完整 200 响应体的 P50 耗时,单位 ms”
“系统可用性” “每分钟内成功返回非 5xx 状态码的请求数 / 总请求数 ≥ 99.9%”
“数据库延迟” “从应用侧发起 SQL 查询到收到第一条结果行的耗时,排除网络往返,单位 μs”
工程要点:在 SLI 定义文档中强制包含“测量起点、终点、单位、聚合方式、采样窗口”五个要素,缺一不可。

2.2 原则二:可测量(Measurable)

SLI 必须能从现有系统或日志中直接或间接获取数值,不能依赖人工估算或主观判断。可测量性决定了 SLI 的落地成本与可信度。

  • 直接可测:从 APM 工具、负载均衡器日志、数据库慢查询日志直接提取的指标。
  • 间接可测:通过多个原始指标计算得出,例如“错误率 = 5xx 计数 / 总请求计数”。
  • 不可接受:“用户体验良好”、“系统稳定”等无法量化的描述。
避坑提示:避免定义“每秒事务数(TPS)”作为核心 SLI,因为 TPS 受业务流量波动影响大,且难以区分好坏。优先选择“成功率”或“延迟分布”。

2.3 原则三:面向用户(User-Facing)

SLI 应反映用户真实感知的服务质量,而非内部组件健康度。用户不关心 CPU 使用率,只关心页面能否打开、下单是否成功。

面向用户原则:SLI 分层映射 用户真实体验 用户侧 SLI:首页加载时间、下单成功率 应用侧 SLI:API P99 延迟、错误率 基础设施 SLI:CPU 使用率、内存水位、磁盘 IO 核心原则 只有用户侧 SLI 才能作为 SLO 目标 基础设施指标仅作参考
常见误区:将“数据库连接池利用率”作为核心 SLI。即使连接池满,若应用有重试和降级机制,用户可能无感知。应优先定义“用户请求成功率”作为 SLI。

2.4 原则四:可区分好坏(Good/Bad Discernible)

SLI 必须能清晰划分“好”与“坏”的边界,否则无法触发告警或计算 SLO。区分标准应基于业务容忍度,而非技术理想值。

SLI 示例 好(Good) 坏(Bad)
API 响应延迟 P99 ≤ 200ms P99 > 200ms
支付成功率 ≥ 99.95% < 99.95%
视频首帧时间 ≤ 1.5s > 1.5s
工程要点:好坏阈值应通过历史数据分析和业务方协商确定,避免拍脑袋。建议使用“错误预算”机制,将坏事件量化为预算消耗。

2.5 原则五:可自动化采集(Automatically Collectable)

SLI 数据必须能从监控系统、日志平台或链路追踪工具中自动拉取,无需人工手动统计。自动化采集是持续可靠性评估的前提。

  • 采集方式:Prometheus Exporter、StatsD、Fluentd、OpenTelemetry SDK。
  • 采集频率:核心 SLI 建议 10s-60s 粒度,非核心可放宽至 5min。
  • 存储与计算:使用时序数据库(如 VictoriaMetrics、Thanos)存储原始数据,通过 Recording Rules 预聚合。
# Prometheus Recording Rule 示例:计算 5 分钟窗口的请求成功率
groups:
  - name: sli_recording_rules
    interval: 1m
    rules:
      - record: job:request_success_rate:ratio_rate5m
        expr: |
          sum(rate(http_requests_total{status=~"2..|3.."}[5m]))
          /
          sum(rate(http_requests_total[5m]))
自动化检查清单:
  1. 数据源是否已接入统一采集层?
  2. 采集脚本是否在 CI/CD 中版本化管理?
  3. 采集失败时是否有告警通知?
  4. 历史数据保留周期是否满足季度 SLO 回溯需求?

2.6 五大原则综合对照

原则 核心问题 常见反例 验收标准
明确 口径是否无歧义? “系统响应慢” 新成员阅读后能独立复现采集逻辑
可测量 能否从现有系统获取数值? “用户体验良好” 已有对应 Grafana 面板或 PromQL 查询
面向用户 是否反映用户真实感受? “CPU 使用率” 指标下降时用户问题应同步改善
可区分好坏 好坏边界是否清晰? “延迟尽量低” 有明确阈值且与业务方达成一致
可自动化采集 是否无需人工介入? “每周手动导出日志统计” 采集脚本已部署且数据持续写入 TSDB
五大原则依赖关系 SLI 口径定义 明确 可测量 面向用户 可区分好坏 可自动化采集 五个原则缺一不可,缺少任意一个都会导致 SLI 在可靠性评审中失效