shaikn6/ops-autopilot

GitHub: shaikn6/ops-autopilot

一个自主 SRE 代理,在 K8s/Prometheus 告警触发时用 LLM 自动诊断根因并提交修复 PR、Slack 摘要和 runbook。

Stars: 0 | Forks: 0

# ops-autopilot **在你休息时自动诊断事故并提交 PR 的自主 SRE。** ![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/70ba9ce139071627.svg) ![Python](https://img.shields.io/badge/python-3.11%2B-blue) ![License](https://img.shields.io/badge/license-MIT-green) 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, 偏差过滤, 子域名突变, 版权保护, 自动化运维, 逆向工具