69 lines
1.8 KiB
Markdown
69 lines
1.8 KiB
Markdown
# OpenClaw Monitor Agent Plugin 开发计划(草案)
|
||
|
||
## 目标
|
||
让被监测服务器通过 WebSocket 主动接入 HarborForge Backend,并持续上报:
|
||
- OpenClaw 版本
|
||
- agent 列表
|
||
- 每 5 分钟主机指标(CPU/MEM/DISK/SWAP)
|
||
- agent 状态变更事件
|
||
|
||
## 握手流程
|
||
1. Admin 在 HarborForge 后台添加 server identifier
|
||
2. Admin 生成 challenge(10 分钟有效)
|
||
3. 插件请求 `GET /monitor/public/server-public-key` 获取公钥
|
||
4. 插件构造 payload:
|
||
- `identifier`
|
||
- `challenge_uuid`
|
||
- `nonce`(随机)
|
||
- `ts`(ISO8601)
|
||
5. 使用 RSA-OAEP(SHA256) 公钥加密,base64 后作为 `encrypted_payload` 发给 `WS /monitor/server/ws`
|
||
6. 握手成功后进入事件上报通道
|
||
|
||
## 插件事件协议
|
||
### server.hello
|
||
```json
|
||
{
|
||
"event": "server.hello",
|
||
"payload": {
|
||
"openclaw_version": "x.y.z",
|
||
"agents": [{"id": "a1", "name": "agent-1", "status": "idle"}]
|
||
}
|
||
}
|
||
```
|
||
|
||
### server.metrics(每 5 分钟)
|
||
```json
|
||
{
|
||
"event": "server.metrics",
|
||
"payload": {
|
||
"cpu_pct": 21.3,
|
||
"mem_pct": 42.1,
|
||
"disk_pct": 55.9,
|
||
"swap_pct": 0.0,
|
||
"agents": [{"id": "a1", "name": "agent-1", "status": "busy"}]
|
||
}
|
||
}
|
||
```
|
||
|
||
### agent.status_changed(可选)
|
||
```json
|
||
{
|
||
"event": "agent.status_changed",
|
||
"payload": {
|
||
"agents": [{"id": "a1", "name": "agent-1", "status": "focus"}]
|
||
}
|
||
}
|
||
```
|
||
|
||
## 实施里程碑
|
||
- M1: Node/Python CLI 插件最小握手联通
|
||
- M2: 指标采集 + 周期上报
|
||
- M3: agent 状态采集与变更事件
|
||
- M4: 守护化(systemd)+ 断线重连 + 本地日志
|
||
|
||
## 风险与注意事项
|
||
- 时钟漂移会导致 `ts` 校验失败(建议 NTP)
|
||
- challenge 仅一次可用,重复使用会被拒绝
|
||
- nonce 重放会被拒绝
|
||
- 需要保证插件本地安全保存 identifier/challenge(短期)
|