jaykuma007/SRE-incident-response-agent
GitHub: jaykuma007/SRE-incident-response-agent
一个基于 LangGraph 和 LLM 构建的自主 SRE 事件响应 Agent,能从 Datadog 告警自动完成遥测采集、根因诊断、修复执行与验证的完整闭环。
Stars: 0 | Forks: 0
# Agentic SRE — 自主事件响应 Agent
一个由 LLM 驱动、基于 **LangGraph** 构建的事件响应 Agent。它从 **Datadog** 摄取告警,
拉取相关的 metrics/logs/traces/events,诊断根本原因,规划修复方案,并在
可配置的安全防护机制下——直接对 **Kubernetes** 执行修复(重启 pod、
回滚、扩缩容)。Agent 自身的操作通过 **OpenTelemetry** (OTLP) 进行监控,并
导出到 Datadog APM,因此 Agent 本身在它所保护的同一个仪表盘中也是可观测的。
这是一个作品集级别的参考实现:其控制流、防护机制和集成
接口都是真实且可用的;在生产环境中使用需要提供真实的凭据,并针对您的环境强化
RBAC/审批策略。
## 架构
```
flowchart TD
A[Datadog Monitor Webhook] --> B[ingest_alert]
B --> C[gather_telemetry\nmetrics/logs/traces/events]
C --> D[diagnose\nLLM root-cause analysis]
D --> E[plan_remediation\nLLM + runbook retrieval]
E --> F{risk level}
F -- low/auto --> G[execute_remediation\nK8s API]
F -- medium/high --> H[request_approval\nSlack]
H -- approved --> G
H -- denied/timeout --> K[notify: manual intervention]
G --> I[verify_fix\nre-query telemetry]
I -- resolved --> J[notify_resolution + postmortem]
I -- not resolved --> D
```
## 工作原理
1. **摄取** — `POST /webhooks/datadog` 接收 Datadog 监控通知,并将其标准化
为一个 `Alert`。
2. **收集遥测数据** — 查询 Datadog API,获取告警时间窗口内、针对
受影响的服务/pod/标签 范围内的 metrics、logs、APM traces 和 events。
3. **诊断** — LLM(默认为 Claude)对遥测数据快照进行推理,生成
结构化的根本原因假设,并附带置信度分数和支持证据。
4. **规划修复** — Agent 将告警与本地 runbook 库
(`src/agentic_sre/runbooks/library/*.yaml`)进行匹配以检索候选操作,然后要求 LLM
选择/优化修复方案,并分配一个**风险级别**(`low`、`medium`、`high`)。
5. **防护门禁** — 处于或低于 `AUTO_REMEDIATE_MAX_RISK` 级别的操作将自动执行。
任何更高风险的操作都会连同“批准/拒绝”选项发送到 Slack,并且图将暂停(LangGraph
`interrupt`),直到人工进行响应。
6. **执行** — Kubernetes 工具使用官方的 `kubernetes` Python 客户端执行操作(重启 deployment、扩缩容 replicas、
回滚到先前版本)。
7. **验证** — 在冷却时间后重新查询遥测数据;如果信号尚未恢复,图将
循环回诊断阶段(受 `MAX_DIAGNOSIS_RETRIES` 限制),而不是盲目地重复
相同的修复。
8. **通知与复盘** — 发送 Slack/PagerDuty 总结,LLM 会起草一份简短的
markdown 复盘报告并附加到事件记录中。
## 项目布局
```
src/agentic_sre/
agent/ LangGraph state machine (state.py, nodes.py, graph.py, prompts.py)
tools/ Datadog, Kubernetes, and notification integrations
otel/ OpenTelemetry instrumentation (traces/metrics/logs -> OTLP -> Datadog)
runbooks/ YAML runbook library + retrieval logic
config.py Settings (env-driven)
models.py Pydantic domain models (Alert, Diagnosis, RemediationAction, Incident)
main.py FastAPI app (webhook receiver + incident status API)
docker/ Dockerfile, docker-compose (agent + otel-collector), collector config
k8s/ Deployment, least-privilege RBAC, Service
tests/ Unit tests (mocked Datadog/K8s clients)
```
## 设置
```
cp .env.example .env # fill in DD_API_KEY, DD_APP_KEY, ANTHROPIC_API_KEY, etc.
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
uvicorn src.agentic_sre.main:app --reload --port 8080
```
将 Datadog webhook 集成指向 `http://:8080/webhooks/datadog`(根据您的 Datadog webhook 配置,将
`$AGENT_WEBHOOK_SECRET` 作为 query 参数或 header 包含在内),Datadog
监控就会开始触发 Agent 运行。
### 使用 Docker Compose 运行 (agent + OTel Collector)
```
docker compose -f docker/docker-compose.yml up --build
```
这将启动 Agent 以及一个预配置好的 `otel/opentelemetry-collector-contrib` 实例
(`docker/otel-collector-config.yaml`),通过 collector 原生的 Datadog exporter 将 OTLP traces/metrics/logs 转发到 Datadog。
### 部署到 Kubernetes
```
kubectl apply -f k8s/rbac.yaml
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
```
`k8s/rbac.yaml` 仅授予 Agent 的 ServiceAccount 所需的最低权限:读取 pods/events,
以及在其 namespace 内对 Deployments 进行 get/patch/update —— 没有 cluster-admin 权限,也不能访问 secrets。
## 环境变量
| 变量 | 用途 |
|---|---|
| `ANTHROPIC_API_KEY` / `LLM_MODEL` | 用于诊断和修复规划的 LLM |
| `DD_API_KEY` / `DD_APP_KEY` / `DD_SITE` | 用于遥测查询的 Datadog API 访问权限 |
| `OTEL_EXPORTER_OTLP_ENDPOINT` | Agent 发送其自身 traces/metrics/logs 的目标地址 |
| `K8S_IN_CLUSTER` / `KUBECONFIG` / `K8S_NAMESPACE` | Kubernetes 客户端配置 |
| `SLACK_WEBHOOK_URL` / `PAGERDUTY_ROUTING_KEY` | 通知与审批渠道 |
| `AUTO_REMEDIATE_MAX_RISK` | Agent 无需人工批准即可执行操作的最高风险级别 |
| `MAX_DIAGNOSIS_RETRIES` | 在升级处理前,诊断→修复→验证循环的上限 |
| `AGENT_WEBHOOK_SECRET` | 在入站 Datadog webhook 上验证的共享密钥 |
完整列表请参见 `.env.example`。
## 安全模型
- 每一项修复操作都带有 `risk_level`;只有处于或低于 `AUTO_REMEDIATE_MAX_RISK` 的操作才能
在无人值守的情况下运行。
- 更高风险的操作在调用 Kubernetes 工具之前,必须通过 Slack 获得明确的
人工批准。
- 验证步骤绝不假定成功——它会重新查询遥测数据,并重试诊断,而
不是无限期地重复一个失败的操作。
- RBAC 的范围仅限于所需的最小权限(没有 delete 权限,没有 secrets 访问权限,仅限 namespace 范围)。
## 扩展
- **新的故障模式**:将一个 YAML 文件放入 `src/agentic_sre/runbooks/library/` 中,描述匹配
条件和候选操作 —— 无需修改代码。
- **新的修复操作**:在 `tools/kubernetes_tool.py` 中添加一个方法,并在
runbook 或规划 prompt 中引用其名称。
- **不同的 LLM 提供商**:替换在 `agent/nodes.py` 中构建的模型客户端
(默认为 `langchain-anthropic`;`langchain-openai` 等可以直接与 LangGraph 兼容替换)。
## License
MIT — 详见 `LICENSE`。
标签:API集成, Datadog, LangGraph, SRE, 偏差过滤, 可观测性, 子域名突变, 用户代理, 请求拦截, 运维自动化, 逆向工具