运维

运维手册

OpsKeeper 的 day-2 操作。完整文档在仓库的 docs/operations-manual.md;本页是执行摘要。

备份

备份两样东西:PostgreSQL(账本与事件记忆是权威源)和 Qdrant snapshot(向量记忆)。 没有独立的导出流水线 —— 数据库就是事实源。

backup
# 1. PostgreSQL 逻辑备份
pg_dump --schema=public --file=opskeeper-$(date +%F).sql "$POSTGRES_DSN"

# 2. Qdrant snapshot
curl -X POST "$QDRANT_URL/snapshots" -H 'content-type: application/json' \
  -d '{"collection_name":"opskeeper_incidents"}'

密钥轮换

  • 插件 HMAC 密钥:在密钥管理器里 staging 一个新密钥,然后滚动重启 Worker。MCP 代理在启动时从环境变量读取 OPSKEEPER_GATEWAY_KEY
  • JWT 签名密钥:通过 API 轮换,旧 token 在下次 refresh 时过期。
  • Edge 密钥RotateSecret 会为 edge 重新生成密钥并替换存储的哈希。

扩缩容

控制平面无状态,在 TCP 负载均衡器后水平扩。编排器通过 MySQL GET_LOCK 做 per-incident 串行化,争用上限是活跃事件数,不是控制平面规模。

监控

Grafana 仪表盘自动预置。控制平面实际暴露的关键指标:

  • loop_phase_total / loop_phase_duration_seconds —— 闭环吞吐与每阶段延迟。
  • opskeeper_tool_invocations_total / opskeeper_tool_duration_seconds —— 每个工具的调用次数与延迟。
  • opskeeper_llm_requests_total / opskeeper_llm_tokens_total —— 每个 Worker 的 LLM 用量。
  • opskeeper_http_requests_total / opskeeper_http_request_duration_seconds —— API 健康度。

事件演练

每季度至少跑一次演练。仓库自带 4 个可复现的 PostgreSQL 场景;用 cmd/incident-seed 写入后确认:

  1. 每个场景的闭环都能走到 postmortem
  2. 提案审计链校验通过(遍历 chat_proposal_audit 哈希)。
  3. verifier 返回的 VerifiedDelta 与预期指标白名单一致。
  4. reporter 在 60 秒内写出复盘。

数据保留

loop_event_log 每行都带 tenant 与时间戳,按租户配置定时清理。向量记忆保留到你的保留策略主动删除为止。 审计链根的外部锚定(透明日志)在 roadmap 上 —— 在那之前,数据库备份就是持久记录。