shaikn6/ops-autopilot
GitHub: shaikn6/ops-autopilot
一个自主 SRE 代理,在 K8s/Prometheus 告警触发时用 LLM 自动诊断根因并提交修复 PR、Slack 摘要和 runbook。
Stars: 0 | Forks: 0
# ops-autopilot
**在你休息时自动诊断事故并提交 PR 的自主 SRE。**



PagerDuty 会呼叫人类。而 ops-autopilot **负责解决问题**。
当警报触发时 —— OOMKilled pod、CrashLoopBackOff、高 CPU、部署失败 —— ops-autopilot 会:
1. 接收 webhook(Prometheus Alertmanager 或 Kubernetes 事件)
2. 收集上下文:最近的 K8s 事件、应用日志、最近的部署记录
3. 调用 LLM(Claude 或 GPT-4),通过置信度评分来诊断根本原因
4. 生成随时间不断积累知识的 runbook 条目
5. 提交包含诊断结果和修复建议的 GitHub PR
6. 在 Slack 发布包含根本原因、受影响组件和行动计划的详细摘要
## 架构
```
flowchart LR
A[Prometheus\nAlertmanager] -->|POST /webhook/prometheus| W
B[Kubernetes\nEvents] -->|POST /webhook/kubernetes| W
C[Manual /\nTest Trigger] -->|POST /webhook/test| W
subgraph ops-autopilot
W[FastAPI\nWebhook API]
W --> D[Context\nGatherer]
D -->|logs + K8s events\n+ recent deploys| E
W --> E[Diagnosis\nEngine]
E -->|LLM call\nClaude / GPT-4| E
E --> F[Action\nOrchestrator]
F --> G[GitHub PR]
F --> H[Slack\nSummary]
F --> I[Runbook\nGenerator]
F --> J[Playbook\nStore]
end
G -->|fix PR| GH[(GitHub)]
H -->|blocks| SL[(Slack)]
I -->|.md files| FS[(Disk)]
J -->|learned patterns| FS
```
## 快速开始
### Docker Compose(推荐)
```
git clone https://github.com/shaikn6/ops-autopilot.git
cd ops-autopilot
cp .env.example .env
# 填写 ANTHROPIC_API_KEY, GITHUB_TOKEN, GITHUB_REPO, SLACK_WEBHOOK_URL
docker compose up -d
```
API 现已在 `http://localhost:8080` 上运行。
### 本地开发
```
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env # add your keys
uvicorn pilot.api.webhook:app --reload --port 8080
```
## 支持的警报来源
| 来源 | Endpoint | 备注 |
|--------|----------|-------|
| Prometheus Alertmanager | `POST /webhook/prometheus` | 标准 Alertmanager webhook 格式 |
| Kubernetes 事件 | `POST /webhook/kubernetes` | 通过自定义 webhook 或直接推送的警告事件 |
| 手动 / 测试 | `POST /webhook/test` | 触发用于测试的合成事件 |
### Prometheus Alertmanager 配置
```
# alertmanager.yml
receivers:
- name: ops-autopilot
webhook_configs:
- url: http://ops-autopilot:8080/webhook/prometheus
send_resolved: false
```
## 事故流程示例
**场景:** 生产环境中一个 `nginx` pod 发生 OOMKilled。
1. Prometheus 触发 `KubePodOOMKilled` 警报 → Alertmanager POST 到 ops-autopilot
2. ops-autopilot 收集:
- `nginx` 最近 10 分钟的 K8s 警告事件
- 最近的日志(最后 50 行)
- 过去 24 小时内的部署记录
3. Claude 诊断:
4. 采取的行动:
- 将 Runbook 条目保存到 `runbooks/kubepodoomkilled.md`
- 打开 GitHub PR:“ops-autopilot: increase nginx memory limit to 512Mi”
- 发送 Slack 消息,包含严重程度、根本原因和操作链接
## API 参考
| 方法 | 路径 | 描述 |
|--------|------|-------------|
| `GET` | `/health` | 健康检查 |
| `GET` | `/incidents` | 列出所有事故 |
| `GET` | `/incidents/{id}` | 获取包含诊断和行动的事故 |
| `POST` | `/webhook/prometheus` | Prometheus Alertmanager webhook |
| `POST` | `/webhook/kubernetes` | Kubernetes 事件 webhook |
| `POST` | `/webhook/test` | 触发合成事故 |
## 配置
所有设置均为环境变量(参见 `.env.example`):
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `ANTHROPIC_API_KEY` | — | Anthropic API key(主要 LLM) |
| `OPENAI_API_KEY` | — | OpenAI API key(备用 LLM) |
| `LLM_PROVIDER` | `anthropic` | `anthropic` 或 `openai` |
| `LLM_MODEL` | `claude-opus-4-5` | 模型标识符 |
| `GITHUB_TOKEN` | — | 用于创建 PR 的 GitHub PAT |
| `GITHUB_REPO` | — | 用于 PR 的 `owner/repo` |
| `SLACK_WEBHOOK_URL` | — | Slack 入站 webhook URL |
| `K8S_IN_CLUSTER` | `false` | 使用集群内 K8s 配置 |
| `MIN_CONFIDENCE_FOR_ACTION` | `0.6` | 仅在此阈值之上时才打开 PR |
| `INCIDENTS_DIR` | `./incidents` | 存储事故 JSON 的位置 |
| `RUNBOOKS_DIR` | `./runbooks` | 存储 runbook Markdown 的位置 |
## 对比 PagerDuty / Opsgenie
| | PagerDuty / Opsgenie | **ops-autopilot** |
|-|----------------------|-------------------|
| 警报路由 | 是 | 是(通过 webhook) |
| 待命排班 | 是 | 否(委托给 PD) |
| 根本原因诊断 | 否 — 呼叫人类 | **是 — 由 LLM 驱动** |
| 自动修复 PR | 否 | **是** |
| Runbook 生成 | 手动 | **自动 + 积累** |
| 从过去的事故中学习 | 否 | **是 — playbook 存储** |
| 成本 | $$$$ | 仅需 API token 费用 |
ops-autopilot 是对你现有警报技术栈的补充 —— 将 Alertmanager 指向它,让它来进行诊断,而人类可以专注于真正需要人类介入的决策。
## 路线图
- [ ] PagerDuty 事故来源
- [ ] Loki / CloudWatch 日志集成,以获取更丰富的上下文
- [ ] 用于 Kubernetes 部署的 Helm chart
- [ ] Slack 交互式按钮(批准修复 / 忽略)
- [ ] 基于 vector-embedding 的相似事故搜索
- [ ] 多集群支持
- [ ] 事故仪表板 Web UI
- [ ] 自动回滚操作(kubectl rollout undo)
- [ ] 创建 JIRA/Linear 工单
## 安全
有关负责任的披露,请参阅 [SECURITY.md](SECURITY.md)。
## 许可证
MIT © Nagizaaz Shaik
标签:AIOps, SRE, 偏差过滤, 子域名突变, 版权保护, 自动化运维, 逆向工具