name: slo-implementation
description: “Framework for defining and implementing Service Level Indicators (SLIs), Service Level Objectives (SLOs), and error budgets.”
risk: critical
source: community
date_added: “2026-02-27”
SLO 实施
用于定义和实施服务级别指标(SLI)、服务级别目标(SLO)和错误预算的框架。
不要在此情况下使用此技能
- 任务与 SLO 实施无关
- 你需要此范围之外的其他领域或工具
说明
- 明确目标、约束和所需输入。
- 应用相关的最佳实践并验证结果。
- 提供可操作的步骤和验证方法。
- 如果需要详细示例,请打开
resources/implementation-playbook.md。
目的
使用 SLI、SLO 和错误预算实施可衡量的可靠性目标,以在可靠性与创新速度之间取得平衡。
在以下情况下使用此技能
- 定义服务可靠性目标
- 衡量用户感知的可靠性
- 实施错误预算
- 创建基于 SLO 的告警
- 跟踪可靠性目标
SLI/SLO/SLA 层级
SLA (Service Level Agreement) ↓ 与客户的合同 SLO (Service Level Objective) ↓ 内部可靠性目标 SLI (Service Level Indicator) ↓ 实际测量定义 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_availabilitytarget:99.9window:28dsli:|sum(rate(http_requests_total{status!~"5.."}[28d])) / sum(rate(http_requests_total[28d]))-name:api_latency_p95target:99window:28dsli:|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:Normal development velocity-remaining_budget:50%action:Consider postponing risky changes-remaining_budget:10%action:Freeze non-critical changes-remaining_budget:0%action:Feature freeze,focus on reliability参考:参见references/error-budget.md
SLO 实施
Prometheus 记录规则
# SLI 记录规则groups:-name:sli_rulesinterval:30srules:# 可用性 SLI-record:sli:http_availability:ratioexpr:|sum(rate(http_requests_total{status!~"5.."}[28d])) / sum(rate(http_requests_total[28d]))# 延迟 SLI(请求 < 500ms)-record:sli:http_latency:ratioexpr:|sum(rate(http_request_duration_seconds_bucket{le="0.5"}[28d])) / sum(rate(http_request_duration_seconds_count[28d]))-name:slo_rulesinterval:5mrules:# SLO 合规性(1 = 满足 SLO,0 = 违反)-record:slo:http_availability:complianceexpr:sli:http_availability:ratio>= bool 0.999-record:slo:http_latency:complianceexpr:sli:http_latency:ratio>= bool 0.99# 剩余错误预算(百分比)-record:slo:http_availability:error_budget_remainingexpr:|(sli:http_availability:ratio - 0.999) / (1 - 0.999) * 100# 错误预算燃烧率-record:slo:http_availability:burn_rate_5mexpr:|(1 - ( sum(rate(http_requests_total{status!~"5.."}[5m])) / sum(rate(http_requests_total[5m])) )) / (1 - 0.999)SLO 告警规则
groups:-name:slo_alertsinterval:1mrules:# 快速燃烧:14.4 倍速率,1 小时窗口# 1 小时内消耗 2% 的错误预算-alert:SLOErrorBudgetBurnFastexpr:|slo:http_availability:burn_rate_1h > 14.4 and slo:http_availability:burn_rate_5m > 14.4for:2mlabels:severity:criticalannotations:summary:"Fast error budget burn detected"description:"Error budget burning at {{ $value }}x rate"# 慢速燃烧:6 倍速率,6 小时窗口# 6 小时内消耗 5% 的错误预算-alert:SLOErrorBudgetBurnSlowexpr:|slo:http_availability:burn_rate_6h > 6 and slo:http_availability:burn_rate_30m > 6for:15mlabels:severity:warningannotations:summary:"Slow error budget burn detected"description:"Error budget burning at {{ $value }}x rate"# 错误预算耗尽-alert:SLOErrorBudgetExhaustedexpr:slo:http_availability:error_budget_remaining < 0for:5mlabels:severity:criticalannotations:summary:"SLO error budget exhausted"description:"Error budget remaining: {{ $value }}%"SLO 仪表盘
Grafana 仪表盘结构:
┌────────────────────────────────────┐ │ SLO Compliance (Current) │ │ ✓ 99.95% (Target: 99.9%) │ ├────────────────────────────────────┤ │ Error Budget Remaining: 65% │ │ ████████░░ 65% │ ├────────────────────────────────────┤ │ SLI Trend (28 days) │ │ [Time series graph] │ ├────────────────────────────────────┤ │ Burn Rate Analysis │ │ [Burn rate by time window] │ └────────────────────────────────────┘示例查询:
# 当前 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:SLOBurnRateHighexpr:|( 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:criticalSLO 评审流程
每周评审
- 当前 SLO 合规性
- 错误预算状态
- 趋势分析
- 事件影响
每月评审
- SLO 达成情况
- 错误预算使用情况
- 事件事后分析
- SLO 调整
每季度评审
- SLO 相关性
- 目标调整
- 流程改进
- 工具增强
最佳实践
- 从面向用户的服务开始
- 使用多个 SLI(可用性、延迟等)
- 设定可实现的目标(不要追求 100%)
- 实施多窗口告警以减少噪音
- 持续跟踪错误预算
- 定期评审 SLO
- 记录 SLO 决策
- 与业务目标保持一致
- 自动化 SLO 报告
- 使用 SLO 进行优先级排序
参考文件
assets/slo-template.md- SLO 定义模板references/slo-definitions.md- SLO 定义模式references/error-budget.md- 错误预算计算
相关技能
prometheus-configuration- 用于指标采集grafana-dashboards- 用于 SLO 可视化
限制
- 仅当任务明确符合上述范围时使用此技能。
- 不要将输出视为特定环境验证、测试或专家审查的替代品。
- 如果缺少必需的输入、权限、安全边界或成功标准,请停下来询问澄清。