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, 偏差过滤, 可观测性, 子域名突变, 用户代理, 请求拦截, 运维自动化, 逆向工具