mcpField
S
sre-engineer

sre-engineer

github.com/jeffallan云与 DevOps12.1k5.1k 次安装今天更新
代码仓库

关于 sre-engineer

面向团队的 SRE 实践技能,用于评估和提升服务可靠性。内容涵盖 SLO、监控、运维杂务自动化、事故复盘与韧性测试。

主要功能

  1. 01SLO 与 SLI 定义指导
  2. 02错误预算计算与策略
  3. 03黄金信号监控与告警
  4. 04运维杂务自动化与混沌测试

适用场景

  1. 01设定可衡量的服务可靠性目标
  2. 02构建可执行的 SLO 告警与仪表板
  3. 03减少重复性运维杂务
  4. 04测试故障场景下的恢复能力

安装

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

$npx skills add https://github.com/jeffallan/claude-skills --skill sre-engineer

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
automation-toil.md
error-budget-policy.md
incident-chaos.md
monitoring-alerting.md
slo-sli-management.md

详细介绍

SRE 工程师

核心工作流

  1. 评估可靠性 - 审查架构、SLO、事故和繁琐工作量
  2. 定义 SLO - 确定有意义的 SLI 并设定适当的目标
  3. 验证一致性 - 在继续之前,确认 SLO 目标符合用户预期
  4. 实施监控 - 构建黄金信号仪表板和告警
  5. 自动化繁琐工作 - 找出重复性任务并构建自动化方案
  6. 测试韧性 - 设计并执行混沌实验;在将实验标记为完成之前,验证恢复情况是否符合 RTO/RPO 目标;端到端验证恢复行为

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
SLO/SLIreferences/slo-sli-management.md定义 SLO、计算错误预算时
错误预算references/error-budget-policy.md管理预算、消耗速率和策略时
监控references/monitoring-alerting.md设计黄金信号、告警和仪表板时
自动化references/automation-toil.md减少繁琐工作、设计自动化模式时
事故references/incident-chaos.md进行事故响应、混沌工程时

约束

必须做到
  • 定义量化的 SLO(例如,99.9% 可用性)
  • 根据 SLO 目标计算错误预算
  • 监控黄金信号(延迟、流量、错误、饱和度)
  • 为所有事故撰写无责复盘报告
  • 衡量繁琐工作量并跟踪其减少进度
  • 将重复的运维任务自动化
  • 使用混沌工程测试故障场景
  • 在可靠性与功能交付速度之间取得平衡
禁止事项
  • 在缺乏用户影响依据的情况下设定 SLO
  • 在没有可执行操作手册的情况下针对症状发出告警
  • 在没有自动化计划的情况下容忍繁琐工作占比超过 50%
  • 跳过复盘或追究个人责任
  • 为重复性任务实施手动流程
  • 未进行容量规划就部署
  • 忽视错误预算耗尽
  • 构建无法平稳降级的系统

输出模板

实施 SRE 实践时,请提供:

  1. 包含 SLI 测量方式和目标的 SLO 定义
  2. 监控/告警配置(Prometheus 等)
  3. 自动化脚本(Python、Go、Terraform)
  4. 包含明确修复步骤的操作手册
  5. 对可靠性影响的简要说明

具体示例

SLO 定义与错误预算计算
# 99.9% availability SLO over a 30-day window
# Allowed downtime: (1 - 0.999) * 30 * 24 * 60 = 43.2 minutes/month
# Error budget (request-based): 0.001 * total_requests

# Example: 10M requests/month → 10,000 error budget requests
# If 5,000 errors consumed in week 1 → 50% budget burned in 25% of window
# → Trigger error budget policy: freeze non-critical releases
Prometheus SLO 告警规则(多窗口消耗速率)
groups:
  - name: slo_availability
    rules:
      # Fast burn: 2% budget in 1h (14.4x burn rate)
      - alert: HighErrorBudgetBurn
        expr: |
          (
            sum(rate(http_requests_total{status=~"5.."}[1h]))
            /
            sum(rate(http_requests_total[1h]))
          ) > 0.014400
          and
          (
            sum(rate(http_requests_total{status=~"5.."}[5m]))
            /
            sum(rate(http_requests_total[5m]))
          ) > 0.014400
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "High error budget burn rate detected"
          runbook: "https://wiki.internal/runbooks/high-error-burn"

      # Slow burn: 5% budget in 6h (1x burn rate sustained)
      - alert: SlowErrorBudgetBurn
        expr: |
          (
            sum(rate(http_requests_total{status=~"5.."}[6h]))
            /
            sum(rate(http_requests_total[6h]))
          ) > 0.001
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: "Sustained error budget consumption"
          runbook: "https://wiki.internal/runbooks/slow-error-burn"
PromQL 黄金信号查询
# Latency — 99th percentile request duration
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service))

# Traffic — requests per second by service
sum(rate(http_requests_total[5m])) by (service)

# Errors — error rate ratio
sum(rate(http_requests_total{status=~"5.."}[5m])) by (service)
  /
sum(rate(http_requests_total[5m])) by (service)

# Saturation — CPU throttling ratio
sum(rate(container_cpu_cfs_throttled_seconds_total[5m])) by (pod)
  /
sum(rate(container_cpu_cfs_periods_total[5m])) by (pod)
繁琐工作自动化脚本(Python)
#!/usr/bin/env python3
"""Auto-remediation: restart pods exceeding error threshold."""
import subprocess, sys, json

ERROR_THRESHOLD = 0.05  # 5% error rate triggers restart

def get_error_rate(service: str) -> float:
    """Query Prometheus for current error rate."""
    import urllib.request
    query = f'sum(rate(http_requests_total{{status=~"5..",service="{service}"}}[5m])) / sum(rate(http_requests_total{{service="{service}"}}[5m]))'
    url = f"http://prometheus:9090/api/v1/query?query={urllib.request.quote(query)}"
    with urllib.request.urlopen(url) as resp:
        data = json.load(resp)
    results = data["data"]["result"]
    return float(results[0]["value"][1]) if results else 0.0

def restart_deployment(namespace: str, deployment: str) -> None:
    subprocess.run(
        ["kubectl", "rollout", "restart", f"deployment/{deployment}", "-n", namespace],
        check=True
    )
    print(f"Restarted {namespace}/{deployment}")

if __name__ == "__main__":
    service, namespace, deployment = sys.argv[1], sys.argv[2], sys.argv[3]
    rate = get_error_rate(service)
    print(f"Error rate for {service}: {rate:.2%}")
    if rate > ERROR_THRESHOLD:
        restart_deployment(namespace, deployment)
    else:
        print("Within SLO threshold — no action required")

由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问。

文档

评论

支持 Markdown