☰
slo-implementation - SKILL
2026/10/19 3:25:53 网站建设 项目流程

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:critical

SLO 评审流程

每周评审

  • 当前 SLO 合规性
  • 错误预算状态
  • 趋势分析
  • 事件影响

每月评审

  • SLO 达成情况
  • 错误预算使用情况
  • 事件事后分析
  • SLO 调整

每季度评审

  • SLO 相关性
  • 目标调整
  • 流程改进
  • 工具增强

最佳实践

  1. 从面向用户的服务开始
  2. 使用多个 SLI(可用性、延迟等)
  3. 设定可实现的目标(不要追求 100%)
  4. 实施多窗口告警以减少噪音
  5. 持续跟踪错误预算
  6. 定期评审 SLO
  7. 记录 SLO 决策
  8. 与业务目标保持一致
  9. 自动化 SLO 报告
  10. 使用 SLO 进行优先级排序

参考文件

  • assets/slo-template.md- SLO 定义模板
  • references/slo-definitions.md- SLO 定义模式
  • references/error-budget.md- 错误预算计算

相关技能

  • prometheus-configuration- 用于指标采集
  • grafana-dashboards- 用于 SLO 可视化

限制

  • 仅当任务明确符合上述范围时使用此技能。
  • 不要将输出视为特定环境验证、测试或专家审查的替代品。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停下来询问澄清。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询