pgoud161/sre-runbook-automation
GitHub: pgoud161/sre-runbook-automation
一个基于 FastAPI 的 SRE 自动化事件响应引擎,通过自动收集 Kubernetes 和 Prometheus 诊断数据并运行匹配的 Runbook 分析,将结构化的事件报告推送至 Slack 以缩短恢复时间。
Stars: 0 | Forks: 0
# SRE Runbook 自动化引擎
这是一个自动化事件响应系统:当 **Alertmanager** 触发 SLO 告警时,该引擎会通过收集 Kubernetes 诊断信息和 Prometheus 指标来自动对事件进行分诊,运行匹配的 runbook 分析,并**向 Slack 发布结构化的事件报告** —— 从而在无需等待人工分诊的情况下缩短平均恢复时间 (MTTR)。
完整的流程图请查看 [`docs/architecture.md`](docs/architecture.md)。
## 技术栈
| 层级 | 工具 |
|---|---|
| Webhook 服务器 | FastAPI |
| Kubernetes 诊断 | kubernetes Python client (pod 状态、事件、deployments) |
| 指标收集 | Prometheus HTTP API (可用性 SLI、错误率、p99 延迟) |
| Runbook 引擎 | Python (AvailabilitySLOFastBurn、LatencySLOBreach、HighErrorRate) |
| 通知 | Slack Block Kit (结构化事件报告) |
| 部署 | Kubernetes (Deployment、Service、RBAC、ServiceAccount) |
| CI/CD | GitHub Actions + Trivy 安全扫描 |
## 工作原理
1. Alertmanager 向 `/webhook/alertmanager` 发送 webhook POST 请求
2. 引擎收集 Kubernetes pod 状态、事件、deployments 以及 Prometheus SLI 指标
3. 匹配的 runbook 会分析诊断信息并确定可能的根本原因
4. 将包含分诊分析和 kubectl 命令的结构化报告发布到 Slack 的 `#sre-incidents` 频道
## 已实现的 Runbook
| 告警 | Runbook | 检测内容 |
|-------|---------|---------|
| `AvailabilitySLOFastBurn` | `runbooks/availability.py` | OOMKill、CrashLoop、不健康的 pod、deployment 失败 |
| `AvailabilitySLOSlowBurn` | `runbooks/availability.py` | 同上,警告级别 |
| `LatencySLOBreach` | `runbooks/latency.py` | 副本不足、节点压力、容量问题 |
| `HighErrorRate` | `runbooks/high_error_rate.py` | 应用程序错误、崩溃循环、错误的 deployment |
## 部署
### 1. 构建并推送镜像
```
docker build -t us-central1-docker.pkg.dev/YOUR_PROJECT/sre-images/runbook-automation:latest .
docker push us-central1-docker.pkg.dev/YOUR_PROJECT/sre-images/runbook-automation:latest
```
### 2. 创建 Slack webhook secret
```
kubectl create secret generic runbook-secrets \
--from-literal=slack-webhook-url=https://hooks.slack.com/YOUR_WEBHOOK \
-n monitoring
```
### 3. 部署到 Kubernetes
```
kubectl apply -f k8s/deployment.yaml
kubectl rollout status deployment/runbook-automation -n monitoring
```
### 4. 配置 Alertmanager webhook
添加到您的 `alertmanager.yaml` 中:
```
receivers:
- name: runbook-automation
webhook_configs:
- url: http://runbook-automation-svc:8080/webhook/alertmanager
send_resolved: false
```
### 5. 本地测试
```
cd app
pip install -r requirements.txt
uvicorn main:app --reload --port 8080
# 使用 curl 测试
curl -X POST http://localhost:8080/webhook/test
```
## 仓库结构
```
app/
main.py # FastAPI webhook server
collectors/
kubernetes_collector.py # Pod status, events, deployments
metrics_collector.py # Prometheus SLI queries
runbooks/
availability.py # Availability SLO breach analysis
latency.py # Latency SLO breach analysis
high_error_rate.py # High error rate analysis
notifiers/
slack_notifier.py # Slack Block Kit incident reports
k8s/
deployment.yaml # K8s Deployment, Service, RBAC
.github/workflows/
ci.yml # Build → Trivy scan → push
docs/
architecture.md # System diagram
```
标签:AV绕过, FastAPI, Runbook, SRE, 偏差过滤, 告警分诊, 子域名突变, 自动化运维, 自定义请求头, 请求拦截, 逆向工具