name: slo-implementation description: 定义和实施服务级别指标(SLI)和服务级别目标(SLO),包括错误预算和警报。用于建立可靠性目标、实施站点可靠性工程(SRE)实践或测量服务性能。
SLO实施
定义和实施服务级别指标(SLI)、服务级别目标(SLO)和错误预算的框架。
目的
使用SLI、SLO和错误预算实施可衡量的可靠性目标,以平衡可靠性和创新速度。
何时使用
- 定义服务可靠性目标
- 测量用户感知的可靠性
- 实施错误预算
- 创建基于SLO的警报
- 跟踪可靠性目标
SLI/SLO/SLA层次结构
SLA (服务级别协议)
↓ 与客户的合同
SLO (服务级别目标)
↓ 内部可靠性目标
SLI (服务级别指标)
↓ 实际测量
定义SLI
常见SLI类型
1. 可用性SLI
# 成功请求 / 总请求
sum(rate(http_requests_total{status!~"5.."}[28d]))
/
sum(rate(http_requests_total[28d]))
2. 延迟SLI
# 低于延迟阈值的请求 / 总请求
sum(rate(http_request_duration_seconds_bucket{le="0.5"}[28d]))
/
sum(rate(http_request_duration_seconds_count[28d]))
3. 持久性SLI
# 成功写入 / 总写入
sum(storage_writes_successful_total)
/
sum(storage_writes_total)
参考: 参见 references/slo-definitions.md
设置SLO目标
可用性SLO示例
| SLO % | 每月停机时间 | 每年停机时间 |
|---|---|---|
| 99% | 7.2小时 | 3.65天 |
| 99.9% | 43.2分钟 | 8.76小时 |
| 99.95% | 21.6分钟 | 4.38小时 |
| 99.99% | 4.32分钟 | 52.56分钟 |
选择合适的SLO
考虑因素:
- 用户期望
- 业务需求
- 当前性能
- 可靠性成本
- 竞争对手基准
示例SLO:
slos:
- name: api_availability
target: 99.9
window: 28d
sli: |
sum(rate(http_requests_total{status!~"5.."}[28d]))
/
sum(rate(http_requests_total[28d]))
- name: api_latency_p95
target: 99
window: 28d
sli: |
sum(rate(http_request_duration_seconds_bucket{le="0.5"}[28d]))
/
sum(rate(http_request_duration_seconds_count[28d]))
错误预算计算
错误预算公式
错误预算 = 1 - SLO目标
示例:
- SLO: 99.9% 可用性
- 错误预算: 0.1% = 43.2分钟/月
- 当前错误: 0.05% = 21.6分钟/月
- 剩余预算: 50%
错误预算策略
error_budget_policy:
- remaining_budget: 100%
action: 正常开发速度
- remaining_budget: 50%
action: 考虑推迟风险变更
- remaining_budget: 10%
action: 冻结非关键变更
- remaining_budget: 0%
action: 功能冻结,专注于可靠性
参考: 参见 references/error-budget.md
SLO实施
Prometheus记录规则
# SLI记录规则
groups:
- name: sli_rules
interval: 30s
rules:
# 可用性SLI
- record: sli:http_availability:ratio
expr: |
sum(rate(http_requests_total{status!~"5.."}[28d]))
/
sum(rate(http_requests_total[28d]))
# 延迟SLI (请求 < 500ms)
- record: sli:http_latency:ratio
expr: |
sum(rate(http_request_duration_seconds_bucket{le="0.5"}[28d]))
/
sum(rate(http_request_duration_seconds_count[28d]))
- name: slo_rules
interval: 5m
rules:
# SLO合规性 (1 = 满足SLO, 0 = 违反)
- record: slo:http_availability:compliance
expr: sli:http_availability:ratio >= bool 0.999
- record: slo:http_latency:compliance
expr: sli:http_latency:ratio >= bool 0.99
# 剩余错误预算 (百分比)
- record: slo:http_availability:error_budget_remaining
expr: |
(sli:http_availability:ratio - 0.999) / (1 - 0.999) * 100
# 错误预算燃烧率
- record: slo:http_availability:burn_rate_5m
expr: |
(1 - (
sum(rate(http_requests_total{status!~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))
)) / (1 - 0.999)
SLO警报规则
groups:
- name: slo_alerts
interval: 1m
rules:
# 快速燃烧: 14.4倍速率, 1小时窗口
# 在1小时内消耗2%错误预算
- alert: SLOErrorBudgetBurnFast
expr: |
slo:http_availability:burn_rate_1h > 14.4
and
slo:http_availability:burn_rate_5m > 14.4
for: 2m
labels:
severity: critical
annotations:
summary: "检测到快速错误预算燃烧"
description: "错误预算以 {{ $value }} 倍速率燃烧"
# 慢速燃烧: 6倍速率, 6小时窗口
# 在6小时内消耗5%错误预算
- alert: SLOErrorBudgetBurnSlow
expr: |
slo:http_availability:burn_rate_6h > 6
and
slo:http_availability:burn_rate_30m > 6
for: 15m
labels:
severity: warning
annotations:
summary: "检测到慢速错误预算燃烧"
description: "错误预算以 {{ $value }} 倍速率燃烧"
# 错误预算耗尽
- alert: SLOErrorBudgetExhausted
expr: slo:http_availability:error_budget_remaining < 0
for: 5m
labels:
severity: critical
annotations:
summary: "SLO错误预算耗尽"
description: "剩余错误预算: {{ $value }}%"
SLO仪表板
Grafana仪表板结构:
┌────────────────────────────────────┐
│ SLO合规性 (当前) │
│ ✓ 99.95% (目标: 99.9%) │
├────────────────────────────────────┤
│ 剩余错误预算: 65% │
│ ████████░░ 65% │
├────────────────────────────────────┤
│ SLI趋势 (28天) │
│ [时间序列图] │
├────────────────────────────────────┤
│ 燃烧率分析 │
│ [按时间窗口的燃烧率] │
└────────────────────────────────────┘
示例查询:
# 当前SLO合规性
sli:http_availability:ratio * 100
# 剩余错误预算
slo:http_availability:error_budget_remaining
# 按当前燃烧率计算错误预算耗尽天数
(slo:http_availability:error_budget_remaining / 100)
*
28
/
(1 - sli:http_availability:ratio) * (1 - 0.999)
多窗口燃烧率警报
# 短窗口和长窗口组合减少误报
rules:
- alert: SLOBurnRateHigh
expr: |
(
slo:http_availability:burn_rate_1h > 14.4
and
slo:http_availability:burn_rate_5m > 14.4
)
or
(
slo:http_availability:burn_rate_6h > 6
and
slo:http_availability:burn_rate_30m > 6
)
labels:
severity: critical
SLO审查流程
每周审查
- 当前SLO合规性
- 错误预算状态
- 趋势分析
- 事件影响
月度审查
- SLO达成情况
- 错误预算使用
- 事件事后分析
- SLO调整
季度审查
- SLO相关性
- 目标调整
- 流程改进
- 工具增强
最佳实践
- 从用户面向的服务开始
- 使用多个SLI (可用性、延迟等)
- 设置可实现的SLO (不要追求100%)
- 实施多窗口警报以减少噪音
- 持续跟踪错误预算
- 定期审查SLO
- 记录SLO决策
- 与业务目标对齐
- 自动化SLO报告
- 使用SLO进行优先级排序
参考文件
assets/slo-template.md- SLO定义模板references/slo-definitions.md- SLO定义模式references/error-budget.md- 错误预算计算
相关技能
prometheus-configuration- 用于指标收集grafana-dashboards- 用于SLO可视化