docs: record resource status sync runbook

This commit is contained in:
Codex
2026-06-12 14:47:00 +00:00
parent 9ab1acbe1d
commit 03aa0433b2
2 changed files with 20 additions and 0 deletions
+12
View File
@@ -34,6 +34,18 @@ bun scripts/cli.ts server status
低内存时 `swap.warning` 非空,先执行 `server swap ensure`
## 节点资源指标同步
资源面板显示旧 CPU/内存/磁盘值时,先对照 provider 上报、backend-core 落库和内部 API 三段:
```bash
docker logs --tail 120 unidesk-provider-gateway-main | rg 'system_status_sent|docker_status_sent|error'
docker logs --tail 200 unidesk-backend-core | rg 'provider_system_status|provider_docker_status|provider_message_failed|serializing parameter'
docker exec unidesk-backend-core sh -lc 'backend-core --fetch-json http://127.0.0.1:8080/api/nodes/system-status?limit=5'
```
provider 已发送但 backend-core 没有 `provider_system_status` / `provider_docker_status`,优先查 backend-core ingest/DB 写入错误;provider 自身停发时才用 `server restart provider-gateway` 做无构建维护重启。修复 backend-core 后必须用 `server rebuild backend-core` 上线并验证 `stale=false``currentCollectedAt` 为当前采样。长期语义见 `docs/reference/observability.md#node-resource-status`
---
## Swap 管理
+8
View File
@@ -48,6 +48,14 @@ backend-core 必须提供 `/api/performance`,返回滚动窗口内的 HTTP 组
frontend Bun server 必须提供同源 `/api/frontend-performance`,记录 webui 静态资源、登录/session、API 代理和 frontend->core 代理操作耗时。浏览器中的 `运行总览 / 性能面板` 必须把 frontend 与 backend-core 指标合并展示为 Bwebui 曲线、组件汇总、最近失败请求、内部操作汇总和最近慢操作;完整性能 JSON 只能通过显式 `查看原始JSON` 打开。
## Node Resource Status
节点 CPU、内存、磁盘和进程资源指标的实时真相来自 provider-gateway 上报的 `system_status`Docker 资源摘要来自 `docker_status`backend-core 负责落库、历史采样和 `/api/nodes/system-status` 聚合。排查资源面板不同步时,必须同时对照 provider-gateway 日志里的 `system_status_sent` / `docker_status_sent`、backend-core 日志里的 `provider_system_status` / `provider_docker_status`、以及 backend-core 内部 API,而不能只看前端旧值或浏览器缓存。
provider 上报的 `collectedAt` 在 backend-core 入库前必须解析为 typed timestamp。Rust backend-core 使用 PostgreSQL 参数时不得把 RFC3339 字符串传给 `$n::timestamptz` 这类 SQL cast`tokio-postgres` 会按目标 PostgreSQL 类型序列化参数,字符串参数可能在序列化阶段失败,导致 provider 已发送但数据库仍停在旧采样。等价实现应先解析为 `DateTime<Utc>` 或目标驱动支持的时间类型,再传入 SQL 参数。
`/api/nodes/system-status` 必须区分当前指标和最后已知指标。超过 backend stale window 的采样不得继续作为 `current` 冒充实时状态;接口和前端应暴露 `stale``currentCollectedAt``lastKnown`,并在指标过期时显示过期状态。运维验证优先使用 backend-core 内部只读入口:`docker exec unidesk-backend-core sh -lc 'backend-core --fetch-json http://127.0.0.1:8080/api/nodes/system-status?limit=5'`。外部 frontend 同源 API 可能受登录 session 保护,不应把未登录请求的 401 当成资源同步失败。
## Low-Memory Diagnostics
主 server 是低资源、低抖动控制面,排查内存时必须先区分共享内存、容器 cgroup 占用和进程私有占用。PostgreSQL 后端进程的 RSS 会重复显示 `shared_buffers` 等共享映射,不能把多个 `postgres` 进程 RSS 简单相加当成真实内存消耗;优先看 `docker stats unidesk-database`、cgroup memory、`/proc/<pid>/smaps_rollup` 的 PSS/USS、`pg_stat_activity` 连接数和 `pg_settings` 中的 `shared_buffers`/`work_mem`