canyang25/AutoSRE
GitHub: canyang25/AutoSRE
一个基于 LLM 的自主 SRE 智能体,能够自动完成从生产告警接收到根因诊断、修复执行和事件报告的完整闭环。
Stars: 1 | Forks: 0
# AutoSRE




**[官网](https://canyang25.github.io/AutoSRE/)**
闭环 AIOps agent 的参考实现。当故障告警触发时,agent 会像值班 SRE 一样进行调查:检查仪表盘、阅读日志、形成假设、实施修复并进行验证。这是一个自包含的 Python 工具使用循环,可与任何主流 LLM 提供商配合使用。可观测性后端(Prometheus、ELK、Ansible)均为轻量级 mock,因此整个系统可以直接在笔记本电脑上运行。
## 工作原理
```
flowchart LR
ALERT([Fault alert]) --> AGENT
subgraph AGENT [AIOps Agent - Python + LLM tool-use]
direction TB
D1[1. Gather signals]
D2[2. Diagnose root cause]
D3[3. Remediate]
D4[4. Report]
D1 --> D2 --> D3 --> D4
end
D1 -->|query metrics| PROM[(Mock Prometheus
:9091)] D1 -->|search logs| ELK[(Mock ELK
:9093)] D3 -->|run playbook| ANS[(Mock Ansible
:9092)] D4 --> REPORT([Incident report]) ``` 1. **收集信号** - 查询时间序列指标(Prometheus)和错误日志(ELK) 2. **诊断** - LLM 将各项信号关联起来,得出根本原因假设 3. **修复** - 选择并执行匹配的 Ansible playbook 4. **验证并报告** - 确认恢复情况,输出结构化的事件报告 ## 场景 | 场景 | 服务 | 症状 | 根本原因 | 修复方案 | | --------- | ----------------- | ------------------------------------ | ----------------------------------- | ----------------------- | | `db` | order-service | API 延迟从 200ms 上升至 1.5s | 数据库连接池配置错误 | `restore_db_pool.yml` | | `disk` | file-service | `/data` 分区使用率达 98% | 磁盘空间耗尽 | `clean_disk_space.yml` | | `network` | payment-service | 支付失败率上升 | 网络分区 | `restart_service.yml` | ## 快速开始 ### 1. 安装 ``` git clone https://github.com/canyang25/AutoSRE.git cd AutoSRE pip install -r requirements.txt ``` ### 2. 添加你的 API key ``` cp .env.example .env # 打开 .env 并设置一个 provider key ``` | 提供商 | 成本 | 密钥 | | -------------- | ----------------- | -------------------------------------------------------- | | **Groq** | 免费,无需信用卡 | `GROQ_API_KEY=gsk_...` | | **Gemini** | 免费额度 | `GEMINI_API_KEY=...` | | **Ollama** | 免费,完全本地化 | `LLM_PROVIDER=ollama` | | Anthropic | 付费 | `ANTHROPIC_API_KEY=sk-ant-...` | | OpenAI | 付费 | `OPENAI_API_KEY=sk-...` | 你的密钥将保留在本地。`.env` 已被 git 忽略,绝对不会提交。 ### 3. 启动 mock 后端 ``` ./start_services.sh # Prometheus :9091 | Ansible :9092 | ELK :9093 ``` ### 4. 运行 agent ``` python agent.py db # DB pool exhaustion python agent.py disk # Disk full python agent.py network # Network partition python agent.py --list # List all scenarios # 没有 API key?离线运行: python agent.py db --simulate ``` ## 生产级特性 ### Webhook 服务器 接收 Alertmanager webhook 并串行处理事件: ``` python server.py # POST /webhook/alertmanager # GET /health # GET /incidents ``` ### 审批闸口 通过 `AUTOSRE_APPROVAL_MODE` 为修复操作设置审批闸口: | 模式 | 行为 | | ---- | -------- | | `auto` | 批准所有 playbook(默认) | | `prompt` | 在执行 `run_playbook` 前通过 stdin 询问操作员 | | `webhook` | 向 `AUTOSRE_APPROVAL_WEBHOOK_URL` 发送 POST 请求;要求返回 `{"approved": true}` | ### LLM 回退链 设置 `LLM_FALLBACK_CHAIN=groq,openai,anthropic`,以便在某个提供商失败时按顺序尝试其他提供商。 ### 事件历史 每次成功的 agent 运行记录都会以 Markdown 格式写入 `reports/` 目录下,并持久化存储到 SQLite(默认为 `autosre.db`)中。可以通过 `GET /incidents` 或 `autosre.store.get_history()` 进行查询。 ### 回滚安全网 如果设置了 `AUTOSRE_ROLLBACK_PLAYBOOK`,AutoSRE 会在修复操作完成后重新检查关键指标,并在服务依然显示为不健康状态时,独立执行回滚 playbook。 ## 仓库结构 ``` . ├── agent.py # Thin CLI → autosre.agent ├── server.py # Thin CLI → autosre.webhook (FastAPI) ├── autosre/ │ ├── agent.py # LLM tool-use loop, fallback, rollback │ ├── tools.py # Prometheus / ELK / Ansible wrappers │ ├── approval.py # Remediation approval gate │ ├── retry.py # HTTP / LLM retries │ ├── logging.py # JSON logs + trace IDs │ ├── store.py # SQLite incident history │ ├── webhook.py # Alertmanager webhook API │ └── config.py # Env-driven configuration ├── scenarios.py/.json # Fault scenario definitions ├── eval.py # Evaluation harness (--json, partial scores) ├── trigger_fault.py # Optional Dify workflow trigger ├── start_services.sh # Start mock backends (no Docker) ├── deploy.sh # Start mock backends via Docker ├── tools/ # Mock Prometheus / ELK / Ansible ├── fixtures/ # Canned metrics, logs, playbooks ├── tests/ # Test suite ├── docs/ # Project website (GitHub Pages) └── .env.example ``` ## 连接真实基础设施 mock 服务使用与真实工具相同的 API 契约。要进行切换: 1. 将 `.env` 中的 `PROMETHEUS_URL`、`ELK_URL` 和 `ANSIBLE_URL` 设置为你的实际端点 2. 如果需要,在 `autosre/tools.py` 的工具包装函数中添加身份验证 header 无论哪种方式,agent 的推理循环都保持不变。 ## 许可证 [MIT](LICENSE)
:9091)] D1 -->|search logs| ELK[(Mock ELK
:9093)] D3 -->|run playbook| ANS[(Mock Ansible
:9092)] D4 --> REPORT([Incident report]) ``` 1. **收集信号** - 查询时间序列指标(Prometheus)和错误日志(ELK) 2. **诊断** - LLM 将各项信号关联起来,得出根本原因假设 3. **修复** - 选择并执行匹配的 Ansible playbook 4. **验证并报告** - 确认恢复情况,输出结构化的事件报告 ## 场景 | 场景 | 服务 | 症状 | 根本原因 | 修复方案 | | --------- | ----------------- | ------------------------------------ | ----------------------------------- | ----------------------- | | `db` | order-service | API 延迟从 200ms 上升至 1.5s | 数据库连接池配置错误 | `restore_db_pool.yml` | | `disk` | file-service | `/data` 分区使用率达 98% | 磁盘空间耗尽 | `clean_disk_space.yml` | | `network` | payment-service | 支付失败率上升 | 网络分区 | `restart_service.yml` | ## 快速开始 ### 1. 安装 ``` git clone https://github.com/canyang25/AutoSRE.git cd AutoSRE pip install -r requirements.txt ``` ### 2. 添加你的 API key ``` cp .env.example .env # 打开 .env 并设置一个 provider key ``` | 提供商 | 成本 | 密钥 | | -------------- | ----------------- | -------------------------------------------------------- | | **Groq** | 免费,无需信用卡 | `GROQ_API_KEY=gsk_...` | | **Gemini** | 免费额度 | `GEMINI_API_KEY=...` | | **Ollama** | 免费,完全本地化 | `LLM_PROVIDER=ollama` | | Anthropic | 付费 | `ANTHROPIC_API_KEY=sk-ant-...` | | OpenAI | 付费 | `OPENAI_API_KEY=sk-...` | 你的密钥将保留在本地。`.env` 已被 git 忽略,绝对不会提交。 ### 3. 启动 mock 后端 ``` ./start_services.sh # Prometheus :9091 | Ansible :9092 | ELK :9093 ``` ### 4. 运行 agent ``` python agent.py db # DB pool exhaustion python agent.py disk # Disk full python agent.py network # Network partition python agent.py --list # List all scenarios # 没有 API key?离线运行: python agent.py db --simulate ``` ## 生产级特性 ### Webhook 服务器 接收 Alertmanager webhook 并串行处理事件: ``` python server.py # POST /webhook/alertmanager # GET /health # GET /incidents ``` ### 审批闸口 通过 `AUTOSRE_APPROVAL_MODE` 为修复操作设置审批闸口: | 模式 | 行为 | | ---- | -------- | | `auto` | 批准所有 playbook(默认) | | `prompt` | 在执行 `run_playbook` 前通过 stdin 询问操作员 | | `webhook` | 向 `AUTOSRE_APPROVAL_WEBHOOK_URL` 发送 POST 请求;要求返回 `{"approved": true}` | ### LLM 回退链 设置 `LLM_FALLBACK_CHAIN=groq,openai,anthropic`,以便在某个提供商失败时按顺序尝试其他提供商。 ### 事件历史 每次成功的 agent 运行记录都会以 Markdown 格式写入 `reports/` 目录下,并持久化存储到 SQLite(默认为 `autosre.db`)中。可以通过 `GET /incidents` 或 `autosre.store.get_history()` 进行查询。 ### 回滚安全网 如果设置了 `AUTOSRE_ROLLBACK_PLAYBOOK`,AutoSRE 会在修复操作完成后重新检查关键指标,并在服务依然显示为不健康状态时,独立执行回滚 playbook。 ## 仓库结构 ``` . ├── agent.py # Thin CLI → autosre.agent ├── server.py # Thin CLI → autosre.webhook (FastAPI) ├── autosre/ │ ├── agent.py # LLM tool-use loop, fallback, rollback │ ├── tools.py # Prometheus / ELK / Ansible wrappers │ ├── approval.py # Remediation approval gate │ ├── retry.py # HTTP / LLM retries │ ├── logging.py # JSON logs + trace IDs │ ├── store.py # SQLite incident history │ ├── webhook.py # Alertmanager webhook API │ └── config.py # Env-driven configuration ├── scenarios.py/.json # Fault scenario definitions ├── eval.py # Evaluation harness (--json, partial scores) ├── trigger_fault.py # Optional Dify workflow trigger ├── start_services.sh # Start mock backends (no Docker) ├── deploy.sh # Start mock backends via Docker ├── tools/ # Mock Prometheus / ELK / Ansible ├── fixtures/ # Canned metrics, logs, playbooks ├── tests/ # Test suite ├── docs/ # Project website (GitHub Pages) └── .env.example ``` ## 连接真实基础设施 mock 服务使用与真实工具相同的 API 契约。要进行切换: 1. 将 `.env` 中的 `PROMETHEUS_URL`、`ELK_URL` 和 `ANSIBLE_URL` 设置为你的实际端点 2. 如果需要,在 `autosre/tools.py` 的工具包装函数中添加身份验证 header 无论哪种方式,agent 的推理循环都保持不变。 ## 许可证 [MIT](LICENSE)
标签:AIOps, AI风险缓解, Python, SRE, 偏差过滤, 大模型智能体, 故障诊断, 无后门, 系统提示词, 自定义请求头, 请求拦截, 运维自动化, 逆向工具