asthamohta/CS224G-SRE
GitHub: asthamohta/CS224G-SRE
基于 LLM 的分布式系统自动化根因分析智能体,通过构建因果依赖关系图和代码变更关联来加速事故调查。
Stars: 0 | Forks: 1
# RootScout
RootScout 是一个用于分布式系统自动化根因分析 (RCA) 的智能体系统。它摄取遥测数据(OTel 链路、指标、日志)和 GitHub PR 数据,构建因果依赖关系图,并使用 LLM 识别导致事故的服务及其原因。
## 工作原理
1. **图构建** — 摄取 Trace Span 并将其连接成有向依赖关系图。每个节点跟踪健康状态和近期事件。
2. **故障隔离** — 当警报触发时,从告警服务开始进行 BFS 遍历,收集可疑的子图。
3. **LLM 推理** — Gemini(或 Claude)智能体接收上下文数据包并返回结构化的根因报告。
## 设置
### 前置条件
- Python 3.9+
- 来自 [Google AI Studio](https://aistudio.google.com/) 的 Gemini API 密钥
### 安装
```
git clone https://github.com/asthamohta/CS224G-SRE.git
cd CS224G-SRE
pip install -r requirements.txt
```
### 配置
```
cp .env.example .env
# 编辑 .env 并设置 GEMINI_API_KEY=your_key_here
```
### 运行演示
```
python demo.py
```
演示程序会摄取合成的 OTel 数据,构建依赖关系图,并针对模拟的 cart-service 故障运行由 LLM 驱动的 RCA。
## 评估
两条评估赛道用于衡量智能体是否正确识别了故障的组件、原因和日期时间,使用 [OpenRCA](https://github.com/microsoft/OpenRCA) 评分标准。
安装评估依赖项:
```
pip install -r requirements_eval.txt
```
### 评分
根据任务类型,每个事故最多按三个标准进行评分:
| 标准 | 匹配方法 |
|---|---|
| 根因组件 | 精确字符串匹配 |
| 根因原因 | 余弦相似度 >= 0.50 (all-MiniLM-L6-v2) |
| 发生日期时间 | 在真实值的 +/- 60 秒范围内 |
只有当所有适用标准都满足时,场景才算通过。
### 赛道 A — 合成基准
十个手工 crafted 的场景,具有已知的拓扑结构和注入的故障。适用于在不针对真实数据运行的情况下迭代优化智能体 Prompt。
```
python eval/run_eval.py # all 10 scenarios (requires Gemini API key)
python eval/run_eval.py --mock # mock LLM, no API key needed
python eval/run_eval.py --difficulty easy
```
样本结果:
```
Class Total Correct Accuracy
easy 3 2 66.7%
medium 3 3 100.0%
hard 4 3 75.0%
Total 10 8 80.0%
```
### 赛道 B — 真实 OpenRCA Bank 遥测数据
来自 [OpenRCA Bank 数据集](https://github.com/microsoft/OpenRCA) 的 27 个事故 — 这是一个基于 Java 的银行微服务系统,包含 14 个 Pod。需要在项目根目录下有 `Bank/` 数据集目录:
```
Bank/
query.csv
record.csv
telemetry/
2021_03_04/
metric/metric_container.csv
log/log_service.csv
2021_03_06/ ...
```
```
python eval/run_openrca_eval.py # 27 Bank incidents (requires Gemini API key)
python eval/run_openrca_eval.py --mock # no API key needed
python eval/run_openrca_eval.py --n 5 # quick test with 5 incidents
python eval/run_openrca_eval.py --bank-dir /path/to/Bank
```
样本结果:
```
BANK BENCHMARK SUMMARY (real OpenRCA telemetry)
Class Total Full pass Avg score
easy 2 1 0.71
medium 18 4 0.52
hard 7 1 0.38
Total 27 6 0.49
```
真实数据的得分低于合成数据,因为真实事故存在噪声信号、跨 Pod 资源争用以及模糊的遥测数据。
## 已知限制
- **赛道 B 上的日期时间评分并非真实有效的。** 故障时间戳直接取自 `record.csv`,而非由智能体预测,因此日期时间标准总是通过。真正的修复方法是在智能体的响应模式中添加 `root_cause_datetime` 字段。
- **真实数据上无 Trace 拓扑。** `trace_span.csv` 使用的是无法映射到 Pod 名称的内部容器 ID,因此改用了静态的手写拓扑。
- **异常检测存在噪声。** KPI 阈值是启发式的;在真实事故期间,许多 Pod 会同时出现峰值,使得因果隔离更加困难。
- **单一系统。** 仅评估了 Bank 系统。OpenRCA 还包括 Telecom 和 Market。
## 项目结构
```
graph/ Graph construction, context retrieval, RCA agent
llm_integration/ Gemini and Claude client wrappers
eval/ Evaluation scripts and scenarios
RootScout/ OTel ingester service (FastAPI)
Ingester/ GitHub webhook ingester
slack_integration/ Slack notification connector
```
标签:AIOps, AI工程师, API集成, DLL 劫持, Gemini, GET参数, OpenTelemetry, OTel, Python, RCA, Site Reliability Engineering, SRE, 偏差过滤, 分布式系统, 可观测性, 告警关联, 响应大小分析, 因果依赖图, 大语言模型, 微服务监控, 故障排查, 无后门, 智能运维, 用户代理, 自动化根因分析, 自动化运维, 逆向工具, 链路追踪