3. SLI(服务等级指标)基础:定义、分类
3.1 SLI 定义与核心价值
服务等级指标(Service Level Indicator, SLI)是对服务某个特定维度(如响应时间、可用性、吞吐量)的量化度量。在基础设施即代码(IaC)场景中,SLI 是驱动自动化决策的原始数据源,也是后续定义 SLO(服务等级目标)和 Error Budget(错误预算)的基石。
核心公式:SLI = 符合预期行为的观测样本数 / 总观测样本数。例如:过去 30 天内,99.9% 的 HTTP GET 请求在 200ms 内完成。
3.2 SLI 四大分类
业界通常将 SLI 划分为四个黄金信号类别。下表总结了每个类别的定义、典型度量单位及 IaC 场景下的常见采集方式:
| 分类 | 定义 | 典型单位 | IaC 采集示例 |
|---|---|---|---|
| 可用性 | 服务能够正常响应请求的时间比例 | 百分比(%) | Prometheus up 指标 / 健康检查端点 |
| 延迟 | 系统处理一个请求所花费的时间 | 毫秒(ms) | API 网关 p99 响应时间 |
| 吞吐量 | 单位时间内系统处理的请求数量 | 请求/秒(RPS) | 负载均衡器连接数 / 消息队列消费速率 |
| 错误率 | 失败请求占总请求的比例 | 百分比(%) | HTTP 5xx 状态码占比 |
3.3 分类详解与 IaC 映射
3.3.1 可用性(Availability)
可用性是最基础的 SLI,通常通过探测(Probe)或端点监控实现。在 Terraform 或 Pulumi 等 IaC 工具中,可用性 SLI 常被用于触发自动扩缩容或自愈流程。
- 计算方式:成功探测次数 / 总探测次数 × 100%
- 常见阈值:99.9%(三个九)、99.99%(四个九)
- IaC 实践:通过
terraform-provider-healthcheck或aws_route53_health_check资源定义探测逻辑。
3.3.2 延迟(Latency)
延迟反映服务的响应速度,通常关注高百分位(如 p99、p95)而非平均值。在 IaC 配置中,延迟 SLI 直接影响负载均衡策略和缓存层配置。
- 计算方式:请求完成时间 - 请求发起时间
- 常见分位:p50(中位数)、p95、p99
- IaC 实践:在 Kubernetes 的
HorizontalPodAutoscaler中引用自定义指标,如custom.googleapis.com|istio|request_duration_seconds|p99。
3.3.3 吞吐量(Throughput)
吞吐量衡量系统的处理能力,与资源利用率强相关。在 IaC 场景中,吞吐量 SLI 常用于评估基础设施扩容是否及时。
- 计算方式:总请求数 / 时间窗口(通常为 1 分钟或 1 小时)
- 常见单位:RPS(Requests Per Second)、TPS(Transactions Per Second)
- IaC 实践:通过
aws_cloudwatch_metric_alarm监控 ALB 的RequestCount指标,触发 Auto Scaling 策略。
3.3.4 错误率(Error Rate)
错误率直接反映服务的健康状态。在 IaC 中,错误率 SLI 是回滚(Rollback)和金丝雀发布(Canary Deployment)的关键决策依据。
- 计算方式:错误请求数 / 总请求数 × 100%
- 常见分类:HTTP 5xx(服务端错误)、4xx(客户端错误,通常不计入 SLI)
- IaC 实践:在 Spinnaker 或 Argo Rollouts 的 pipeline 中,设置错误率阈值(如 > 1%)自动触发回滚。
避坑提示:不要将 4xx 错误直接计入错误率 SLI,除非明确将其定义为业务错误。4xx 通常代表客户端问题,混入会导致 SLI 失真。
3.4 SLI 分类关系图
下图展示了四大 SLI 分类之间的逻辑关系及其在 IaC 自动化闭环中的位置:
3.5 SLI 定义最佳实践
在 IaC 项目中定义 SLI 时,应遵循以下原则:
- 可测量性:SLI 必须能从基础设施层直接采集,避免依赖业务日志解析。
- 稳定性:优先使用服务网格(如 Istio)或 API 网关(如 Kong)的标准化指标,而非应用自曝指标。
- 可区分性:按环境(dev/staging/prod)和组件(计算/网络/存储)拆分 SLI,避免全局混用。
- 时间窗口:明确 SLI 的滚动窗口(如 5 分钟、1 小时、30 天),不同窗口适用于不同自动化场景。
关键结论:SLI 是 IaC 自动化策略的感知层。没有精确的 SLI 定义,后续的 SLO 制定和 Error Budget 管理将失去数据基础。在多环境 IaC 实践中,每个环境应维护独立的 SLI 口径配置,并通过版本控制管理其变更历史。