thaocao1/incident-response-agent

GitHub: thaocao1/incident-response-agent

基于 LangGraph 的多智能体系统,可自主调查 Kubernetes 基础设施事件,在人工审批后生成结构化报告。

Stars: 0 | Forks: 0

# 事件响应 Agent LangGraph 多智能体系统,可自主调查真实的基础设施事件——监控实时的 Prometheus 告警,查询 kubectl,交叉比对 runbook,并在采取任何修复措施之前,通过 human-in-the-loop 检查点生成结构化的事件报告。 ## 为什么会有这个项目 事件调查遵循着一个可重复的模式:告警触发,运维人员检查指标,阅读日志,交叉比对 runbook,与近期的变更进行关联,撰写报告。这个 Agent 做的也是同样的事情——只不过它调用的工具是真实的,所在的集群是真实的,而且错误调用工具带来的后果也是真实的。 平均调查时间:**约 3 分钟**(而人工基线为 15 分钟)。 ## 架构 ``` ┌──────────────────┐ │ Prometheus Alert │ └────────┬─────────┘ │ ▼ ┌─────────────────────────┐ │ ALERT_RECEIVED │ │ Parse, classify, │ │ set severity │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ TRIAGE │ │ PromQL deep-dive, │ │ scope blast radius │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ INVESTIGATE │ │ kubectl logs/describe,│ │ recent deployments │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ CORRELATE │ │ Runbook lookup (RAG), │ │ change correlation │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ REMEDIATE (gated) │◄── Human-in-the-loop │ Proposed action + │ checkpoint. Agent │ rollback plan │ STOPS here until └────────┬────────────────┘ operator approves. │ ▼ ┌─────────────────────────┐ │ REPORT │ │ Structured markdown, │ │ timeline, root cause │ └─────────────────────────┘ ``` ## 工具 | 工具 | 功能 | 安全性 | |------|-------------|--------| | `promql_query` | 针对 Prometheus 执行 PromQL | 只读 | | `kubectl_get` | kubectl get/describe/logs | 只读 | | `kubectl_restart` | kubectl rollout restart | **受控**——需要人工批准 | | `runbook_search` | 通过 psap-rag-engine API 进行 RAG 检索 | 只读 | | `recent_deploys` | 查看近期 Helm/ArgoCD 变更的 Git log | 只读 | | `alert_history` | 查询 Alertmanager 获取关联告警 | 只读 | ## 关键设计决策 - **默认只读。** 只有 `kubectl_restart` 可以更改状态,并且它需要通过检查点获得明确的人工批准。 - **真实工具,而非模拟。** 该 Agent 查询的是实时的 RKE2 集群和实时的 Prometheus。如果它构建了错误的 PromQL 查询,它会收到报错并自我纠正——这些自我纠正的情况都已记录在案。 - **Runbook 集成。** CORRELATE(关联)阶段会调用 [psap-rag-engine](../psap-rag-engine) API 来检索相关的 runbook 部分。该 Agent 不仅仅是进行调查;它还会将调查结果与已记录的流程联系起来。 - **结构化 trace。** 每次工具调用、每次状态转换、每次 LLM 决策都会记录到 Langfuse 中。这些 trace 与报告一样有价值。 ## 已记录的失败模式 | 场景 | 发生情况 | 解决方式 | |----------|-------------|------------| | Prometheus 无法访问 | Agent 重试 3 次,然后使用现有数据报告降级的调查结果 | 自动 | | 格式错误的 PromQL | Agent 收到报错,重新构建查询(已记录的自我纠正) | 自动 | | kubectl 超时 | Agent 记录超时,跳至下一步调查步骤 | 自动 | | Runbook API 宕机 | Agent 在不进行 runbook 关联的情况下继续执行,并在报告中标记缺失 | 自动 | | Agent 建议了错误的修复方案 | human-in-the-loop 检查点会在执行前捕获它 | 设计使然 | ## 运行 ``` # 前提条件:访问配置了 Prometheus 的 K8s 集群,Python 3.11+ cp .env.example .env # Configure cluster access, Prometheus URL, LLM API key pip install -r requirements.txt python -m agent.main --watch # Continuous alert monitoring mode # 或触发单个调查 python -m agent.investigate --alert "PodCrashLoopBackOff" --namespace production ``` ## 演示(3 分钟) 1. 终止一个 pod:`kubectl delete pod nginx-xxx -n demo` 2. Prometheus 中触发告警 3. Agent 接收告警,进行分类、调查(kubectl logs, PromQL),并与 runbook 进行关联 4. Agent 提出修复方案 + 回滚计划,等待批准 5. 生成包含时间线、根本原因和 trace 链接的报告 ## 项目状态 | 阶段 | 状态 | |-------|--------| | LangGraph 状态机 | 进行中 | | 工具实现 | 进行中 | | Human-in-the-loop 检查点 | 计划中 | | Langfuse 集成 | 计划中 | | 自我纠正文档 | 计划中 | | 演示视频 | 计划中 | *属于 [public-sector-ai-reference-arch](../public-sector-ai-reference-arch) 作品集的一部分。调用 [psap-rag-engine](../psap-rag-engine) 进行 runbook 检索。另请参阅:[airgap-llm-framework](../airgap-llm-framework)*
标签:AIOps, LangGraph, PyRIT, 多智能体系统, 子域名突变, 库, 应急响应, 自定义请求头, 运维自动化, 逆向工具