mcpField
S
slo-implementation

slo-implementation

github.com/wshobson云与 DevOps41.9k10.6k 次安装2 周前更新
代码仓库

关于 slo-implementation

用于定义和实施 SLI、SLO 与错误预算的可靠性工程指南,面向负责服务可靠性的团队。提供指标、告警规则及仪表板模式示例。

主要功能

  1. 01定义可用性、延迟和持久性 SLI
  2. 02设定 SLO 目标与衡量窗口
  3. 03计算并制定错误预算策略
  4. 04编写 Prometheus 记录规则和告警
  5. 05规划 Grafana SLO 仪表板

适用场景

  1. 01为服务设定可靠性目标
  2. 02评估用户感知的服务可靠性
  3. 03依据错误预算调整发布节奏
  4. 04建立基于 SLO 的告警

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wshobson/agents --skill slo-implementation

安装后在 Claude Code 中输入/slo-implementation确认已加载。

附带文件references/details.md

详细介绍

SLO 实施

用于定义和实施服务等级指标(SLI)、服务等级目标(SLO)和错误预算的框架。

目的

使用 SLI、SLO 和错误预算实施可衡量的可靠性目标,以平衡可靠性与创新速度。

何时使用

  • 定义服务可靠性目标
  • 衡量用户感知的可靠性
  • 实施错误预算
  • 创建基于 SLO 的告警
  • 跟踪可靠性目标

SLI/SLO/SLA 层级

SLA (Service Level Agreement)
  ↓ Contract with customers
SLO (Service Level Objective)
  ↓ Internal reliability target
SLI (Service Level Indicator)
  ↓ Actual measurement

定义 SLI

常见 SLI 类型
1. 可用性 SLI
# Successful requests / Total requests
sum(rate(http_requests_total{status!~"5.."}[28d]))
/
sum(rate(http_requests_total[28d]))
2. 延迟 SLI
# Requests below latency threshold / Total requests
sum(rate(http_request_duration_seconds_bucket{le="0.5"}[28d]))
/
sum(rate(http_request_duration_seconds_count[28d]))
3. 持久性 SLI
# Successful writes / Total writes
sum(storage_writes_successful_total)
/
sum(storage_writes_total)

设置 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]))

错误预算计算

错误预算公式
Error Budget = 1 - SLO Target

示例:

  • 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

SLO 实施

Prometheus 记录规则
# SLI Recording Rules
groups:
  - name: sli_rules
    interval: 30s
    rules:
      # Availability SLI
      - record: sli:http_availability:ratio
        expr: |
          sum(rate(http_requests_total{status!~"5.."}[28d]))
          /
          sum(rate(http_requests_total[28d]))

      # Latency SLI (requests < 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 compliance (1 = meeting SLO, 0 = violating)
      - 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

      # Error budget remaining (percentage)
      - record: slo:http_availability:error_budget_remaining
        expr: |
          (sli:http_availability:ratio - 0.999) / (1 - 0.999) * 100

      # Error budget burn rate
      - 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:
      # Fast burn: 14.4x rate, 1 hour window
      # Consumes 2% error budget in 1 hour
      - 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: "Fast error budget burn detected"
          description: "Error budget burning at {{ $value }}x rate"

      # Slow burn: 6x rate, 6 hour window
      # Consumes 5% error budget in 6 hours
      - 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: "Slow error budget burn detected"
          description: "Error budget burning at {{ $value }}x rate"

      # Error budget exhausted
      - alert: SLOErrorBudgetExhausted
        expr: slo:http_availability:error_budget_remaining < 0
        for: 5m
        labels:
          severity: critical
        annotations:
          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]         │
└────────────────────────────────────┘

示例查询:

# Current SLO compliance
sli:http_availability:ratio * 100

# Error budget remaining
slo:http_availability:error_budget_remaining

# Days until error budget exhausted (at current burn rate)
(slo:http_availability:error_budget_remaining / 100)
*
28
/
(1 - sli:http_availability:ratio) * (1 - 0.999)

其他模式和模板

更详细的模板和完整示例位于 references/details.md。阅读该文件以获取完整的模式库。

评论

支持 Markdown