Anujay-Saraf/incident-response-system
GitHub: Anujay-Saraf/incident-response-system
基于LangGraph和OpenAI多Agent协作的AI运维事件响应系统,自动完成日志与指标分析、根因推断、业务影响评估及报告生成的全流程。
Stars: 0 | Forks: 0
# AI 运维指挥中心
自主多 Agent 事件响应系统
## 问题
企业的事件响应缓慢且依赖人工。工程师需要花费数小时筛选日志、指标和部署数据,以确定出了什么问题以及原因。
## 解决方案
AI 运维指挥中心是一个多 Agent 系统,可协调跨日志、指标和部署的自主调查。六个专业 Agent 协同工作以:
1. **事件指挥官 (Incident Commander)** - 从多个来源加载事件数据
2. **日志分析 (Log Analysis)** - 检测错误模式和异常
3. **指标分析 (Metrics Analysis)** - 识别指标峰值和相关性
4. **RCA 分析 (RCA Analysis)** - 将调查结果综合为根本原因假设
5. **业务影响 (Business Impact)** - 计算受影响的用户和收入影响
6. **执行摘要 (Executive Summary)** - 生成工程和执行报告
由 LangGraph 编排提供支持,LLM 推理来自 **OpenAI (ChatGPT / GPT-4o)**。路由器、RCA 和报告编写 Agent 均使用 LLM 进行推理;每个 Agent 都有确定性的降级方案,因此系统也可以完全在离线启发式模式下运行。
## 架构
```
START → Incident Commander → Log Analysis + Metrics Analysis →
RCA Analysis → Business Impact → Executive Summary → END
```
每个 Agent:
- 接收 IncidentState 作为输入
- 执行专项分析
- 将调查结果扩充到状态中
- 记录调用详情以供审计追踪
- 将增强后的状态返回给下一个 Agent
## 快速开始
```
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# 将你的 OPENAI_API_KEY 粘贴到 .env 中
pytest
python app.py
```
然后在浏览器中打开 http://localhost:8000。
## 演示
1. 点击“Scenario 1: DB Pool Exhaustion”按钮
2. 等待分析完成(约 2 秒)
3. 查看事件卡片,包含根本原因置信度、受影响用户、收入影响
4. 点击“View Full Details”查看工程摘要、证据和恢复建议
## 项目结构
```
incident-response-system/
├── agents/ # Multi-agent system
│ ├── __init__.py # IncidentState dataclass
│ ├── incident_commander.py # Data loader & orchestrator
│ ├── log_analysis.py # Error pattern detection
│ ├── metrics_analysis.py # Metric spike detection
│ ├── rca_analysis.py # Root cause hypothesis
│ ├── business_impact.py # User & revenue impact
│ └── executive_summary.py # Report generation
├── data/ # Realistic mock scenarios
│ ├── scenario_1/ # DB Pool (50 → 30 connection limit)
│ ├── scenario_2/ # Memory Leak (500MB → 2000MB)
│ └── scenario_3/ # Cascading Failure (timeout cascade)
├── frontend/ # Vanilla HTML/CSS/JS
│ ├── dashboard.html # Incident list & triggers
│ ├── incident_detail.html # Full analysis view
│ └── styles.css # Professional UI
├── tests/ # pytest suite
│ ├── test_scenario_1.py
│ ├── test_scenario_2.py
│ ├── test_scenario_3.py
│ └── test_all_scenarios.py
├── app.py # FastAPI backend
├── mock_data.py # Data loader
├── requirements.txt # Dependencies
├── .env.example # Configuration template
├── README.md # This file
└── SETUP_INSTRUCTIONS.md # Detailed setup guide
```
## 测试
```
pytest # Run all tests
pytest -v # Verbose output
pytest tests/test_scenario_1.py # Single scenario
```
所有三个场景均通过测试,具备:
- 检测到的日志异常 > 0
- 检测到的指标异常 > 0
- 根本原因置信度 > 0.60
- 受影响用户 > 0
- 完整的审计追踪
## 结果
### 场景 1:数据库连接池耗尽
- **根本原因**:在最近的部署中,连接池大小从 50 减少到 30
- **置信度**:85%
- **受影响用户**:1,400
- **收入影响**:$700/分钟
- **关键指标**:连接超时错误,CPU 峰值 23% → 78%,错误率 0.1% → 68%
### 场景 2:内存泄漏
- **根本原因**:代码回归导致内存未被释放
- **置信度**:72%
- **受影响用户**:5,000
- **收入影响**:$1,500/分钟
- **关键指标**:GC 暂停时间增加,内存 500MB → 2000MB(无部署)
### 场景 3:级联故障
- **根本原因**:调用下游 payment-api 服务超时
- **置信度**:80%
- **受影响用户**:3,000
- **收入影响**:$1,200/分钟
- **关键指标**:超时错误,延迟峰值 55ms → 8000ms,错误率飙升至 85%
## 技术栈
- **Python 3.10+** - 核心语言
- **LangGraph** - Agent 编排
- **FastAPI** - REST 后端(分析作为后台任务运行;UI 轮询实时进度)
- **OpenAI (gpt-4o)** - LLM 推理,通过 `.env` 中的 `OPENAI_API_KEY` 进行配置
- **Pydantic** - 数据验证
- **pytest** - 测试
- **原生 HTML/CSS/JavaScript** - 前端(无需构建步骤)
## API Endpoints
- `POST /api/incidents/trigger` - 启动事件分析(立即返回 `current_status: "investigating"`;Agent 在后台运行)
{
"timestamp": "2026-07-07T14:32:15Z",
"service": "payment-api",
"alert_description": "Connection pool exhaustion",
"severity": "critical"
}
- `GET /api/incidents` - 列出所有事件(最新优先)
- `GET /api/incidents/{incident_id}` - 轮询实时分析状态 / 检索已完成的分析
- `GET /api/config` - 活动的 LLM 提供商和模型(未设置 key 时为 `heuristic`)
- `GET /api/graph` - Agent 图的 Mermaid 渲染
- `GET /api/health` - 健康检查
- `GET /` - 仪表盘 HTML
- `GET /incident/{incident_id}` - 事件详情 HTML
## Slack 助手机器人模式
后端也可以作为 Slack 事件助手运行,以便用户可以从 Slack 线程中触发、
检查和治理事件,同时 Web 应用仍然是完整的指挥中心。
在 `.env` 中配置这些值:
```
SLACK_SIGNING_SECRET=...
SLACK_BOT_TOKEN=xoxb-...
SLACK_DEFAULT_CHANNEL=C0123456789
PUBLIC_BASE_URL=https://your-public-backend.example.com
```
Slack 应用 URL:
- Slash command 请求 URL:`POST /api/slack/commands`
- Events API 请求 URL:`POST /api/slack/events`
- Interactivity 请求 URL:`POST /api/slack/interactivity`
建议的机器人权限范围:`chat:write`、`commands`、`app_mentions:read`,
以及机器人应回答线程事件问题的频道的消息读取权限范围。
示例命令:
```
/aioc trigger db
/aioc trigger memory
/aioc status
/aioc ask why do we think this is the root cause?
/aioc trace
```
## 后续步骤
- 实现实时的 Datadog/Splunk 集成
- 添加 Codex 风格的部署差异代码变更分析
- 创建自动化修复手册
- 构建 Slack/PagerDuty 通知系统
- 实现多步骤恢复自动化
- 添加历史事件搜索和学习功能
## 许可证
MIT
## 作者
Amulya Gupta & Anujay
标签:AIOps, LangGraph, 多智能体, 安全规则引擎, 智能运维, 根因分析, 逆向工具