21 KiB
运维层与运维审计层开发规格
适用范围:
- Codex 多机协作控制系统
- 主控、Worker、审计层、硬件测试层、数据层的统一运维与抢修
- 每台接入终端设备上的本地运维 Agent 与本地运维审计 Agent
目标:
- 在整个系统最外层增加
运维层和运维审计层 - 让运维层成为整个系统的
主运维层,并可继续接管其他项目的运维场景 - 把运维层做成开放式能力底座,而不是只服务当前这一套 Codex 系统
- 让任何一个环节发生故障时,都能用最省 token 的方式快速定位与修复
- 定义主 Agent 在线与离线两种情况下的修复审批和复验机制
- 定义运维层自身故障时,由主 Agent 反向抢救运维层的机制
- 保证每一台接入系统的终端设备都具备本地自救与被监管能力
1. 总体原则
- 运维层是整个系统的外圈保护层,也是全局
主运维层,不只看主控,也看 Worker、审计层、硬件测试层、数据库、额度系统,以及后续接入的其他项目运维域。 - 每一台接入系统的设备都必须常驻两个本地角色:
Ops AgentOps Audit Agent
Ops Agent负责发现问题、执行修复、运行脚本、拉起服务、切换配置。Ops Audit Agent负责监督Ops Agent是否健康、是否有权修复、修复是否成功、是否需要升级到紧急决策。- 只要主 Agent 在线且能够正常返回信息,
Ops Agent的修复动作必须先得到主 Agent 同意。 - 当主 Agent 失联且超过阈值,
Ops Audit Agent才能代行最终修复执行判断。 - 运维层必须是开放式的,支持通过标准化 Connector / Adapter / Runbook 注册新的项目运维域。
- 如果运维层本身挂了,而主 Agent 仍然在线,主 Agent 必须具备反向抢救运维层的能力。
- 所有故障、修复、复验、切换都必须写入统一事件流和运维账本。
2. 组件设计
2.1 云端组件
Ops Control Plane负责汇总节点健康、统一策略、下发巡检与修复任务。Ops Policy Engine负责判断巡检频率、自动修复权限、紧急接管条件。Ops Ledger负责记录故障、修复工单、复验结论、主控恢复后的同步结果。Chief Ops Audit Agent负责跨节点复核、紧急情况下最终判定、主控恢复后的回填汇报。Ops Extension Registry负责注册其他项目或其他系统的运维域、连接器、协议适配器、能力标签和 Runbook 集合。Ops Connector Runtime负责装载 SSH、HTTP、Docker、Kubernetes、Windows Service、局域网 RPC 等运维连接器。
2.2 每台终端设备上的本地组件
Local Ops Agent负责本机服务巡检、日志采集、健康探针、执行修复动作。Local Ops Audit Agent负责监督本机Local Ops Agent、校验修复结果、在主控失联时决定是否允许继续修复。Local Watchdog负责当本地服务崩溃时自动拉起最小监控能力。
2.3 被监管对象
- 主 Agent / Master Agent Runtime
- API 网关 / WebSocket
- Worker Daemon / Thread Gateway
- Audit Orchestrator / Specialist Audit Agents
- Capability Registry / Test Rig Gateway
- Postgres / Redis / Object Storage / Event Store
- gptpluscontrol Backend / Agent
- GPU Bridge / Windows Tool Bridge
- 其他项目的运维域
- 外部服务
- 外部测试台
- 外部边缘盒子
- 外部 CI / 运维主机
2.4 开放式运维扩展模型
运维层不应该写死只服务这一套系统,建议增加 3 层开放接口:
Ops Domain表示一个被接管的运维域,例如:- 当前 Codex 协作系统
- 某个独立设备云
- 某个视频分析服务
- 某个生产测试线
Ops Connector表示接入方式,例如:sshhttp_apidockerk8swindows_servicelan_rpc
Ops Runbook Pack表示一组可被版本化管理的运维修复剧本。
任何新项目要接入主运维层,只需要注册:
- 它属于哪个
Ops Domain - 用什么
Ops Connector - 提供哪些健康探针
- 有哪些修复 Runbook
- 权限边界是什么
- 是否允许自动修复
2.5 跨设备运维能力
运维层必须支持跨设备运维,而不是每台机器只能各修各的。
建议至少支持以下跨设备能力:
- 跨设备拉取日志
- 跨设备读取健康快照
- 跨设备重启服务
- 跨设备下发配置与热更新
- 跨设备切换账号 / 切换备用通道
- 跨设备回收孤儿 thread / lease / repair ticket
- 跨设备重连 Thread Gateway、GPU Bridge、Test Rig Gateway
- 跨设备触发最小修复 Runbook
建议把跨设备运维动作抽象成标准能力:
remote_execremote_restart_serviceremote_fetch_logsremote_push_configremote_switch_accountremote_reconnect_channelremote_collect_snapshotremote_run_runbook
跨设备运维的执行原则:
- 默认由云端
Ops Control Plane发起跨设备动作。 - 实际执行仍然落在目标节点的
Local Ops Agent上。 Local Ops Audit Agent负责复核跨设备动作是否成功、是否越权。- 所有跨设备动作必须记录
source_node_id和target_node_id。 - 禁止未经授权的节点直接互相执行运维指令,必须经过主运维层或紧急救援通道。
3. 部署要求
3.1 每个节点必须具备的最小组合
每台接入系统的 Mac、Windows、云工作机、独立测试台,至少都要有:
Local Ops AgentLocal Ops Audit AgentHealth Probe RunnerRepair Runbook ExecutorOps Event Uploader
3.2 云端部署
云端至少部署:
Ops Control PlaneOps Policy EngineOps LedgerChief Ops Audit AgentOps Extension RegistryOps Connector RuntimeStandby Controller
3.3 主 Agent 的运维监管规则
- 主 Agent 每小时至少主动检查一次运维层是否健康。
- 检查内容包括:
- 每个节点的
Ops Agent是否在线 - 每个节点的
Ops Audit Agent是否在线 - 最近一次巡检是否成功
- 是否存在未结清的修复工单
- 是否存在长时间未复验完成的修复动作
- 运维层本身的控制面、账本、连接器和扩展注册是否健康
- 每个节点的
3.4 运维层作为主运维层的边界
主运维层至少要覆盖两类对象:
系统内域当前这套 Codex 协作系统内部组件外部项目域后续接入的其他项目、其他机器群、其他测试台、其他后台服务
这意味着运维层的数据模型里必须有:
domain_iddomain_typeconnector_typeownership_scoperunbook_pack_version
4. 动态巡检频率
4.1 高频模式
以下任一条件满足时,巡检频率切到 每 5 分钟:
- 有用户正在手机端 / Web 端活跃使用
- 有项目正在执行
- 有 Worker thread 正在跑任务
- 有能力租约正在占用摄像头、串口、机器人等硬件
- 有未完成的审计任务
- 有未关闭的高优先级告警
4.2 空闲模式
以下条件全部满足时,巡检频率降到 每 1 小时:
- 当前没有在线用户会话
- 没有任何活跃项目或任务
- 没有任何设备租约占用
- 没有现场测试正在运行
- 没有待处理高优先级故障
4.3 模式切换策略
- 由
Ops Policy Engine根据近 10 分钟活动窗口判定模式。 - 切换时写入事件:
ops_mode_switched_to_activeops_mode_switched_to_idle
5. 故障命名与日志规范
5.1 设计目标
日志必须做到:
- 一眼能看出故障发生在哪个环节
- 一眼能看出受影响组件和动作
- 能直接映射到修复 Runbook
- 让主 Agent、Ops Agent、Ops Audit Agent 都能低 token 地总结问题
5.2 统一命名格式
建议所有错误键都遵循:
<LAYER>.<DOMAIN>.<COMPONENT>.<ACTION>.<ERROR_CODE>
例如:
ENTRY.APP.PROJECT_CREATE.VALIDATION_FAILMASTER.SCHEDULER.DISPATCH.NODE_UNAVAILABLEWORKER.CODEX.THREAD_START.RATE_LIMITTHREAD.BROKER.MESSAGE_ROUTE.PERMISSION_DENIEDAUDIT.MULTIMODAL.VERIFY.EVIDENCE_MISSINGCAPABILITY.CAMERA.LEASE.PREEMPT_TIMEOUTDATA.POSTGRES.WRITE.REPLICATION_LAGOPS.LOCAL_AGENT.HEARTBEAT.MISSEDOPS_AUDIT.REPAIR.VERIFY.RESTART_FAILED
5.3 每条错误日志最少字段
fault_keyseveritynode_idservice_nameproject_idthread_reftrace_idrunbook_idfirst_seen_atlast_seen_atsummarysuggested_next_action
5.4 日志分层前缀建议
ENTRYMASTERWORKERTHREADAUDITCAPABILITYDATAAUTHQUOTAOPSOPS_AUDITRECOVERY
5.5 Token 节省策略
Ops Agent 汇报时不直接贴长日志,而是优先输出:
fault_key- 影响节点数
- 首次时间 / 最近时间
- top 3 关联错误
- 绑定的
runbook_id - 当前是否可自动修复
6. 除日志之外的运维检测方式
只靠日志不够,建议同时启用以下机制:
6.1 心跳与存活探针
- 每个服务定期发送 heartbeat
- 每个节点的
Ops Agent和Ops Audit Agent互相监督 heartbeat - 主控、Worker、审计层、硬件网关都要有独立存活探针
6.2 合成探针 / 端到端冒烟
- 周期性模拟:
- 创建一个测试项目
- 下发一个轻量任务
- 启动一个测试线程
- 拉取一次线程历史
- 触发一次能力租约
- 如果冒烟链路断掉,说明系统虽然“进程活着”,但业务已经不通
6.3 队列与事件流监测
- 检测消息队列积压
- 检测 Event Store 写入延迟
- 检测线程消息是否长时间停滞
- 检测 SSE / WebSocket 是否失去推送
6.4 资源与性能监测
- CPU / 内存 / 磁盘 / GPU 占用
- WSL2 健康度
- 数据库复制延迟
- 对象存储写入失败率
- 网络抖动和丢包
6.5 认证与额度健康监测
- ChatGPT / Codex 登录态有效期
- API key 可用性
- gptpluscontrol 上报的新鲜度
- 5h / 7d 剩余额度阈值预警
6.6 配置与版本漂移检测
- Worker 版本不一致
- Gateway 配置漂移
- Runbook 版本落后
- 审计协议版本不兼容
6.7 孤儿状态清理
- 孤儿 lease
- 孤儿 thread
- 孤儿 repair ticket
- 无人接管的审计任务
6.8 本地屏幕 / 设备快照抽样
在硬件项目中,可周期性采样:
- 关键设备截图
- 摄像头关键帧
- 串口短日志
- UI OCR 状态
用于快速判断“服务活着但现场已经坏了”的情况。
7. 修复权限与决策规则
7.1 当主 Agent 在线且能正常返回信息
流程:
Ops Agent发现问题- 生成修复建议与最小证据包
- 向主 Agent 请求批准
- 主 Agent 同意后,
Ops Agent执行修复 Ops Audit Agent做复验- 复验结果回报主 Agent
原则:
Ops Agent不得自行越权修复- 主 Agent 有权拒绝、延后、改用人工介入
- 复验未通过则不能直接关闭工单
7.2 当主 Agent 失联
定义失联建议:
- 连续 3 次心跳缺失,或
- 超过 15 分钟无法返回健康响应
流程:
Ops Audit Agent确认主 Agent 失联- 通知
Chief Ops Audit Agent - 进入紧急运维模式
Ops Audit Agent依据策略与证据,做最终是否修复的执行判断Ops Agent执行修复Ops Audit Agent复验- 修复结果写入
Ops Ledger - 主 Agent 恢复后,向其回放修复详情
7.3 当主 Agent 恢复在线
恢复后必须同步:
- 故障摘要
- 故障影响范围
- 已执行修复动作
- 修复结果
- 复验结论
- 是否仍有残余风险
- 是否需要人工复盘
7.4 当运维层自身挂了,但主 Agent 在线
这是一个单独处理场景,不能等同于普通服务故障。
定义运维层自身故障示例:
Ops Control Plane无法响应Ops Ledger写入失败Ops Connector Runtime大面积失效- 多个节点的
Ops Agent/Ops Audit Agent同时失联 - 运维层事件流中断
流程:
- 主 Agent 在每小时健康检查或告警事件中发现运维层异常
- 主 Agent 切换到
ops_rescue_mode - 主 Agent 通过独立的最小救援通道直连节点或备用控制器
- 主 Agent 对运维层发起反向修复任务
- 节点上的最小本地 Watchdog / Standby 代理执行运维层恢复
- 恢复后由
Ops Audit Agent复验运维层是否重新可用 - 恢复结果写入账本,并结束
ops_rescue_mode
要求:
- 主 Agent 抢救运维层时,不能依赖已经损坏的运维控制面本身
- 必须保留至少一条最小救援通道,例如:
- 直连节点的紧急 RPC
- 备用控制器通道
- 本地 Watchdog 的保底命令接口
- 只读日志和健康快照通道
8. 运维修复状态机
8.1 Repair Ticket 状态
detectedclassifiedapproval_pendingapproved_by_masterapproved_by_ops_audit_emergencyrepairingrepair_failedverification_pendingverified_passverified_failreported_to_masterclosed
8.2 自动修复白名单
仅允许以下低风险动作默认自动化:
- 重启本地 Agent 进程
- 重连 WebSocket / SSE
- 重试心跳上传
- 重拉轻量配置
- 恢复日志采集
以下动作必须更高权限:
- 切换主账号 / 备用账号
- 重启数据库
- 回滚 Worker 版本
- 强制释放能力租约
- 重启 GPU Bridge
- 重刷固件 / 重置测试设备
9. 修复动作与复验规范
9.1 RepairAction 输入字段
repair_ticket_idfault_keynode_idservice_namedecision_source值:master_agentops_audit_agent_emergency
runbook_idaction_typerisk_levelexpected_resulttimeout_seconds
9.2 RepairVerification 输出字段
repair_ticket_idverification_status值:passfailpartial_passinconclusive
post_health_summaryremaining_risksevidence_refsrecommended_followup
9.3 复验最少检查项
- 原故障是否停止出现
- 关键进程是否恢复
- 事件流是否恢复
- 相关接口是否恢复
- 如涉及硬件,现场状态是否恢复
- 是否引入新的副作用
10. 建议 API / 事件
10.1 API
POST /api/v1/ops/nodes/heartbeatPOST /api/v1/ops/health/reportPOST /api/v1/ops/domains/registerPOST /api/v1/ops/connectors/registerPOST /api/v1/ops/remote-actions/requestPOST /api/v1/ops/remote-actions/{action_id}/approvePOST /api/v1/ops/remote-actions/{action_id}/resultPOST /api/v1/ops/repair-ticketsPOST /api/v1/ops/repair-tickets/{ticket_id}/approval-requestPOST /api/v1/ops/repair-actions/startPOST /api/v1/ops/repair-actions/{action_id}/resultPOST /api/v1/ops/repair-verificationsPOST /api/v1/ops/rescue/enterPOST /api/v1/ops/rescue/actions/startPOST /api/v1/ops/rescue/completeGET /api/v1/ops/events/stream
10.2 事件
ops_agent_heartbeat_missedops_audit_agent_heartbeat_missedops_domain_registeredops_connector_registeredops_remote_action_requestedops_remote_action_approvedops_remote_action_completedops_remote_action_failedops_fault_detectedops_fault_classifiedops_repair_approval_requestedops_repair_approved_by_masterops_repair_approved_by_ops_audit_emergencyops_repair_startedops_repair_completedops_repair_failedops_repair_verification_passedops_repair_verification_failedops_layer_degradedops_rescue_mode_enteredops_rescue_action_startedops_rescue_action_completedops_layer_recoveredmaster_agent_offline_confirmedmaster_agent_recoveredops_repair_report_synced_to_master
11. 最小数据库表建议
ops_nodesops_domainsops_connectorsops_agent_heartbeatsops_audit_agent_heartbeatsops_faultsops_fault_occurrencesops_repair_ticketsops_repair_actionsops_repair_verificationsops_runbooksops_mode_historyops_rescue_actionsops_reports_to_master
12. MVP 建议
V1
- 每个节点部署
Local Ops Agent与Local Ops Audit Agent - 实现 heartbeat、fault_key 命名、repair ticket、主 Agent 审批、修复复验
- 高频 / 空闲巡检切换
- 主 Agent 对运维层的每小时健康检查
V2
- 加入合成探针、业务冒烟、孤儿状态清理、主控离线后的紧急修复授权
- 加入主 Agent 恢复后的修复回放
- 加入
Ops Domain / Connector / Runbook Pack的开放式接入
V3
- 加入更精细的 Runbook 路由
- 加入多节点联动修复
- 加入版本回滚与策略化自愈
- 加入主 Agent 对运维层自身的反向抢救通道与
ops_rescue_mode
13. 一句话总结
运维层 解决“谁去发现、执行和扩展运维修复”的问题,
运维审计层 解决“谁有权批准、谁来复验、主控失联时谁来兜底”的问题。
它们必须常驻在每个节点,并且站在整个系统最外层,持续保护主控、Worker、审计层、硬件层、数据层,以及后续接入的其他项目运维域;当运维层自己挂掉时,还要允许主 Agent 反向抢救它。
14. 支持两种保活模式
运维层和运维审计层也要兼容两种备用接管模式:
14.1 单云 + 设备端备用池
说明:
Cloud A作为主用控制面- 一台首选
Standby Mac或其他设备,作为首选备用控制器 - 同时维护一个
standby_device_pool作为后备容灾池
最低要求:
- 至少一台首选备用设备必须常开
- 必须具备独立于主云的可达路径
- 每台候选备用设备至少运行:
Standby ControllerLocal Ops AgentLocal Ops Audit AgentOps Rescue Gateway
当主云故障时:
- 当前活动备用设备接收主控失联告警
- 提升本机备用控制面
- 恢复最小项目视图、工单视图、修复审批链路
- 运维审计层继续做复验和修复回放
14.2 双云热备 / 温备
说明:
Cloud A主用Cloud B备用
最低要求:
Cloud B只做接管准备,不承担常态重负载- 保留备用控制面、备库、快照和恢复钩子
当主云故障时:
Cloud B接管控制面Chief Ops Audit Agent继续保留紧急修复判定权- 现场各节点
Local Ops Agent继续执行修复动作 - 主云恢复后,再做账本回放与状态对账
14.3 统一抽象
无论采用哪种模式,运维层都应统一抽象为:
standby_provider = standby_mac | cloud_b | both
这样修复流程、审计流程、修复复验、主控恢复回放都不需要重新设计,只替换备用提供者即可。
14.4 单服务器模式下的自动备用设备切换
如果采用“单服务器 + 设备端保活”,就必须支持自动切换备用设备。
新增对象
standby_device_poolstandby_device_candidateactive_standby_devicetakeover_packagestandby_device_score
每台设备需要上报
device_ideligible_for_standbypreferred_rankalways_onmemory_free_mbdisk_free_mblan_reachabilitytunnel_reachabilitylast_heartbeat_attakeover_package_version
自动切换规则
- 控制面维护
standby_device_pool - 为排名前
N的设备同步最小takeover_package - 如果当前
active_standby_device心跳超时:- 立即标记为
degraded - 重新计算
standby_device_score - 自动提升下一台候选设备
- 立即标记为
- 新的备用设备接管后:
- 发布新的 endpoint 清单
- 更新
ops_mode_history - 通知主 Agent、Worker、手机 App
备用设备模式要求
cold standby- 未预部署接管组件
- 不允许进入自动切换路径
warm standby- 已预部署接管组件
- 已同步最近的
takeover_package - 允许自动切换
hot standby- 已预部署接管组件
- 保持更高频状态同步
- 允许自动切换,且优先级更高
结论:
- 自动切换只允许选用
warm standby或hot standby cold standby只能作为人工应急候选,不能当自动保活候选
takeover_package 最小内容
- 最近的项目 / 任务索引
- endpoint 注册表
- 修复工单索引
- 权限与审批快照
- 当前
standby_epoch
新增事件
standby_device_registeredstandby_device_score_updatedactive_standby_device_changedtakeover_package_syncedstandby_device_failed
新增数据库表
standby_devicesstandby_device_scoresstandby_device_packagesstandby_failover_history
候选设备预部署清单
每个 warm/hot standby 候选设备至少预部署:
Standby ControllerLocal Ops AgentLocal Ops Audit AgentOps Rescue Gateway- 最小运行时依赖
- 最小配置模板
- endpoint 注册表缓存
- 最近的
takeover_package