Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AgentOps: 告警处置双进程 AgentOps

Python 做脑,Go 做手。 告警到达 → 计划生成 → 交给 Go 执行引擎可靠 执行(调度/重试/超时/HITL/崩溃恢复)→ 事件流回推 → 根因报告。

与 orbit-agent 仓库(事件溯源执行引擎)联合叙事: orbit-agent 证明底 层执行能力,本项目证明业务集成与 AI 应用能力

架构

告警(webhook/API) ──▶ Python 智能面(本仓库)
                        │ ① 指纹 wfID = sha256(alertname + labels)
                        │ ② 计划(LangGraph 动态规划 / 变更类 runbook)
                        │ ③ POST /workflows/register(幂等)
                        │ ④ watchdog: HITL 超时 → reject + 升级通知
                        ▼
                   Go 执行引擎 agentopsd(orbit-agent/cmd/agentopsd)
                        │ supervisor 启动扫描自动 Recover;引擎池
                        │ 工具: metric_query / cmdb_get / rag_search /
                        │       restart_service / llm_infer(经 MCP 回调)
                        │ 语义: 重试 / HITL 挂起 / Abort(graceful+补偿)
                        │ kill -9 → 重启 → 从事件日志断点续跑
                        ▼
                   Redis Stream 事件流(数据面,执行真相)
                        ▼
                   Python 消费事件 → 节点终态/根因/耗时 → 报告
                        ▼
                   审批控制台(GET /ui): 批准/拒绝/中止 + 通知面板

设计要点:

  • 执行是资产,不是进程: 事件溯源 + 幂等注册,重复告警/引擎崩溃不会 产生双工作流或丢执行
  • 执行面独立于智能面存活: Go 崩溃 Python 零感知,恢复后从断点续跑; Python 崩溃凭 SQLite 会话表 + 事件流重建
  • 信任边界 = 沙箱边界: 固定工具直接执行,LLM 生成物(阶段 3)强制 容器沙箱

快速开始(阶段 4)

前置同阶段 3 + 无需额外依赖(协议 mock 由 app/infra_mock.py 自带)。

./demo/e2e_stage4.sh

阶段 4 脚本演示三条路径(审批挂起 / 拒绝升级 / 中止补偿):

  1. 路径A 审批挂起: 变更类告警 RestartServiceAlert 走固定 runbook (require_approval 节点)→ n3 挂起 WAITING_HITLresume approve (携带审批意见)→ Ansible job 重启服务 → 闭环 SUCCEEDED + 根因报告
  2. 路径B 拒绝升级: 同一告警另一实例挂起后不审批 → Python watchdog 超时(10s)自动 resume rejectFAILED + escalation 升级通知 (GET /notifications,审批控制台可见)
  3. 路径C 中止补偿: DiskHighAlert(runbook,补偿节点 n3 → n2)执行中 abort → 未开始节点 ABORTED、补偿节点照常执行 → 工作流级 ABORTED 终态

单独启动(阶段 4 增加 infra mock):

docker compose up -d redis
.venv/bin/python app/infra_mock.py &          # 协议 mock: Prometheus/CMDB/Ansible,9091
(cd ../orbit-agent && go build -o /tmp/agentopsd ./cmd/agentopsd)
/tmp/agentopsd --listen :8080 --redis localhost:6379 --store redis \
  --llm-mcp-url http://127.0.0.1:8001/mcp --infra-url http://127.0.0.1:9091
AGENTOPS_HITL_TIMEOUT_S=30 .venv/bin/uvicorn app.main:app --port 8000
.venv/bin/python -m app.mcp_server &
open http://localhost:8000/ui                  # 审批控制台

快速开始(阶段 3)

前置: docker + docker compose;orbit-agent 仓库在 agentops 同级目录; export DEEPSEEK_API_KEY=...(阶段 2 起 e2e 的规划器与 llm_infer 节点真实调 DeepSeek);embedding 模型预缓存(/tmp/fastembed_cache,来源 与离线加载方法见 docs/design.md D2 —— 未缓存自动降级 BM25,demo 不 阻塞)。

python3 -m virtualenv .venv && .venv/bin/pip install -r requirements.txt
./demo/e2e.sh

e2e 脚本 12 步: compose 起 redis → agentopsd → MCP 互操作探针 (Python 官方 SDK ↔ agentopsd /mcp)→ Python 智能面 + llm_infer MCP server → 模拟告警 CPUHighAlert(LangGraph 动态计划,断言 planSource=langgraph)→ 执行过半时 kill -9 引擎 → 重启自动恢复 → Replan 演示: append 追加节点 n5(引擎续跑执行)→ 轮询终态 (5 节点全 COMPLETED)+ 根因报告(含追加节点结论)→ 检索审计 (retrieval_audit 表命中/耗时)→ kill -9 Python 智能面 → 重启后 status/report 接续。

单独启动:

docker compose up -d redis
(cd ../orbit-agent && go build -o /tmp/agentopsd ./cmd/agentopsd)
/tmp/agentopsd --listen :8080 --redis localhost:6379 --store redis \
  --llm-mcp-url http://127.0.0.1:8001/mcp
AGENTOPS_PLAN_DELAY_MS=1500 .venv/bin/uvicorn app.main:app --port 8000
.venv/bin/python -m app.mcp_server &   # llm_infer MCP server(独立进程,8001)
curl -X POST localhost:8000/alert/receive \
  -H 'Content-Type: application/json' \
  -d '{"alertname":"CPUHighAlert","labels":{"instance":"web-01"}}'

接口契约(双仓库共享): docs/interface.md

模块

模块 职责 阶段
app/alerting.py 告警解析 + 指纹去重(wfID 确定性) 1
app/planner.py 固定计划 JSON(降级兜底)+ {labels.x} 插值 + delay 注入 1 → 3
app/planner_lg.py LangGraph 规划器: 规划期 RAG → LLM 生成 DAG → 校验重试 → 兜底 3
app/rag.py 混合检索: jieba BM25 + fastembed 向量 + RRF 融合(Qdrant 内存) 3
app/kb.json 运维 runbook 知识库(13 条,规划期检索来源) 3
app/registry.py Go 控制面客户端(register/append/resume/abort/status/tools,GoDown/Conflict/BadRequest 区分) 1 → 4
app/events.py 事件契约解析 + blob 旁路还原 + 终态投影(含 ABORTED) 1 → 4
app/report.py 根因报告(节点终态/耗时/根因) 1
app/session.py SQLite 会话表 + 检索审计表 + 通知表(崩溃后重建锚点) 1 → 4
app/watchdog.py HITL 超时策略: 持续挂起超时 → 自动 reject + escalation 通知 4
app/main.py FastAPI 入口(告警接收/append/resume/abort/状态/报告/通知/UI) 1 → 4
app/infra_mock.py 协议级 mock: Prometheus 查询 / CMDB / Ansible 异步 job(9091) 4
app/static/ui.html 审批控制台: 工作流列表 + 批准/拒绝/中止 + 通知面板 4
app/llm.py DeepSeek 调用(llm_infer 无状态契约) 2
app/mcp_server.py llm_infer MCP server(独立进程,8001) 2

路线

  1. 固定计划 + mock 工具 + kill -9 恢复演示 ✅
  2. MCP 双向: 规划期工具探测 + llm_infer 回调(真实 LLM)+ Python 崩溃接续 ✅
  3. LangGraph 动态计划 + 规划期 RAG(混合检索)+ append Replan ✅
  4. 协议级工具 mock(Prometheus/CMDB/Ansible)+ HITL 审批 UI + watchdog 超时升级 + 引擎 Abort(graceful + 补偿)✅ —— demo/e2e_stage4.sh
  5. 压测评估: 闭环耗时 / 恢复 RTO / 重试成功率(可复现数字)

Gate

  • Go(orbit-agent): gofmt -l + go build + go vet + go test -race
  • Python: ruff check + pytest(事件契约测试用 Go 真实导出 fixture, 防 schema 漂移)

About

基于orbit-agent底座的智能运维系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages