快速上手
架构
OpsKeeper 由一个控制平面、一个数据平面、一套插件接口组成。本页介绍它们是如何组合在一起的。
控制平面
控制平面用显式的状态机(也就是闭环)驱动事件流转。每次跃迁都受护栏保护,并产生一笔 append-only 账本事件。
control plane
┌──────────────────────────────────────────────────────────────┐
│ OpsKeeper 控制平面 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │
│ │ loopbiz │ │ manager │ │ 安全边界 │ │
│ │ (状态机) │→ │ (派发) │→ │ (提案 + 审计) │ │
│ └─────┬───────┘ └─────┬───────┘ └─────────┬──────────┘ │
│ │ │ │ │
└─────────┼────────────────┼────────────────────┼───────────────┘
▼ ▼ ▼
(ledger) (workers) (proposals)闭环
八个阶段,依次推进;护栏未满足时闭环拒绝往下走:
- detected —— 从 Prometheus / Loki / Tempo / Webhook 接入告警。
- correlated —— 跨源语义去重(规则 + 带熔断器的 LLM)。
- investigated —— 跨指标、日志、追踪、代码、主机、拓扑的只读 RCA。
- critiqued —— 在严重度 ≥ critical 时由同行 critic 审计 RCA。
- approved —— 对挂起提案的人工审批。
- recovered —— 窄域变更执行器运行已审批动作。
- verified —— 独立验证器返回 VerifiedDelta。
- postmortem —— Reporter 基于预计算的 ReportFacts 撰写报告。
Manager 派发
Manager 维护一张决策表,把 (phase, severity, role) 映射到 Worker。每个 Worker 声明一个 safety_level,从 L0(只读)到 L3(带提案的可变更)。Manager 拒绝派发安全级别高于阶段允许值的 Worker。
dispatch table (节选)
- phase: detected
severity: [info, warn, error, critical]
worker: alerter
safety_level: L0
- phase: investigated
severity: [info, warn, error, critical]
worker: investigator
safety_level: L0
- phase: approved
severity: [info, warn, error, critical]
worker: repairer
safety_level: L3 # 需要挂起提案 + 人工审批人数据平面
- PostgreSQL —— 事件记忆、append-only 账本(
loop_event_log、loop_state、loop_contract),MySQLGET_LOCK风格的咨询锁用于编排串行化。 - Qdrant —— 对历史事件做向量检索。关键字召回 + RRF 融合排序;每个查询保留候选决策证据。
- Nacos Config —— 技能注册中心,HTTP 2.x API,本地降级,30 秒轮询热加载。
- OpenTelemetry —— 端到端 W3C
traceparent传递。
插件接口
仓库里自带两个插件:
- agentteams-plugin-installer —— 把 AgentTeams Dashboard 变成 OpsKeeper 的插件控制台(5 个扩展点 + HTTP API)。
- opskeeper-teamharness —— Worker 侧插件,通过 stdio MCP 暴露 17 个工具。Bearer + HMAC + W3C traceparent 鉴权。
Append-only 账本
闭环背后有两份持久化记录。loop_event_log 是 append-only 事件事实源 —— 数据库触发器拒绝 UPDATE/DELETE,更正一条事件的唯一方式是追加一条 correction。每次写入都带幂等键,重放是 exactly-once。在此之上,每个变更提案的 跃迁(insert / decide / expire / execute / rollback)都会向 chat_proposal_audit 追加一行,构成 SHA256 哈希链:hash_n = SHA256(prev_hash || canonical_json(payload) || proposal_id || action)。 任何对 payload 或顺序的篡改都会使后续所有哈希失效,仓库内置的校验器会遍历整条链并报告第一处断链。
可观测
- 仓库自带 Prometheus 抓取配置。
- Loki 日志流和 Tempo 追踪按
trace_id关联。 - 为闭环、审计账本、技能健康度预置 Grafana 仪表盘。