ServerStatus 中文版:轻量服务器探针与多节点云监控面板(cppla/ServerStatus)
ServerStatus 是一个轻量的服务器探针和云监控面板,支持多节点在线状态、资源占用、三网延迟、服务监测、SSL 证书检查、Watchdog 告警、HTTP API 和 Web 配置管理,提供 Docker 服务端/客户端、Shell 客户端与 Go 源码部署方式,并附带 OpenAPI 3.1 文档供 AI Agent 导入。
社区作者 · zZz
它解决什么问题
ServerStatus 中文版是一个轻量的服务器探针和云监控面板,支持多节点在线状态、资源占用、三网延迟、服务监测、SSL 证书检查、Watchdog 告警、HTTP API 和 Web 配置管理。在线演示:https://tz.cloudcpp.com
【服务端组成】Docker 镜像内的默认路径与环境变量
CONFIG_PATH=/app/config/config.json(主配置文件)、STATS_PATH=/app/data/stats.json(月流量与状态持久化文件,每 60 秒写入,关键操作与正常退出时立即写入)、WEB_DIR=/app/web(WebUI 静态文件目录)、HTTP_ADDR=:80(WebUI 与 HTTP API 监听地址)、AGENT_ADDR=:35601(客户端 TCP 上报监听地址)、ADMIN_TOKEN=空(管理 API Bearer Token,为空时禁用管理接口)、ADMIN_CORS_ORIGIN=空(可选 API CORS Origin)、INSECURE_CALLBACK_TLS=false、VERBOSE=false、TZ=Asia/Shanghai。对应命令行参数:--config/-c、--stats、--web-dir/-d、--http、--agent、--verbose/-v、--version;旧参数 --bind/-b 和 --port/-p 仍可用于设置 Agent TCP 监听地址。【客户端变量】SERVER 默认 127.0.0.
1(Go 服务端地址)、USER 默认 s01(客户端用户名,必须匹配服务端配置)、PORT 默认 35601(Agent TCP 上报端口)、PASSWORD 默认 USER_DEFAULT_PASSWORD、INTERVAL 默认 1(秒,状态上报间隔)、PROBEPORT 默认 80(三网 TCP 探测端口)、PROBE_PROTOCOL_PREFER 默认 ipv4(可选 ipv4、ipv6)、PING_PACKET_HISTORY_LEN 默认 100(丢包历史窗口)、CU 默认 cu.tz.
cloudcpp.com、CT 默认 ct.tz.cloudcpp.com、CM 默认 cm.tz.cloudcpp.com、CLIENT 默认 psutil(可选 psutil、linux)。
【HTTP 管理 API】管理接口使用 Bearer Token:Authorization: Bearer <ADMIN_TOKEN>。无需认证:GET /api/health(进程、Agent TCP、版本和配置路径状态)、GET /api/schema(机器可读的端点与配置集合描述)、GET /api/openapi.json(可被 AI Agent 直接导入的 OpenAPI 3.1 文档)、GET /json/stats.json(WebUI 使用的实时状态快照)。需要认证:GET/PUT /api/config(读取或整体替换配置)、GET/POST /api/servers(查询或新增节点)、PUT/DELETE /api/servers/{username}(修改或删除节点)、POST /api/servers/{username}/reset-traffic(将当前流量设为本月基线)、GET/POST /api/monitors、PUT/DELETE /api/monitors/{index-or-name}、GET/POST /api/sslcerts、PUT/DELETE /api/sslcerts/{index-or-name}、GET/POST /api/watchdog、PUT/DELETE /api/watchdog/{index-or-name}、POST /api/reload(从磁盘重新读取配置)、POST /api/restart(在进程内重启采集运行时)。请求体最大 1 MiB。配置修改采用“校验 → 备份 → 持久化 → 原子切换”的顺序,成功后现有 Agent 连接会被关闭,
Python 客户端约 3 秒后自动重连并获取新的 monitors;/api/restart 不退出 Go 进程,因此 Docker 和手动运行方式具有一致语义。
【配置文件结构】包含 servers(username、name、type、host、location、password、monthstart、disabled)、monitors(name、host、interval、type)、sslcerts(name、domain、port、interval、callback)、watchdog(name、rule、interval、callback)。约束:servers.username 必须唯一;monthstart 自动限制在 1-28;port 自动限制在 1-65535;interval 最小为 1 秒,Watchdog 中表示通知冷却时间,不是客户端采集间隔;配置写入前会创建 config.json.bak-*,最多保留 10 份;
Docker 单文件 bind mount 无法被 rename 覆盖时,服务端会在完成备份后安全地写回原 inode。使用 Docker 单文件挂载时,配置备份位于容器 /app/config 的可写层,如需长期保留历史版本,建议同时在宿主机备份 server/config.json。
【Watchdog 表达式】rule 由 Go expr 引擎执行,并兼容旧版 Exprtk 的常用写法:字符串外的单个操作符会自动转换,& → &&、| → ||、= → ==,例如 cpu>90&load_1>5&username!='s01' 与 cpu>90 && load_1>5 && username!='s01' 等价。字符串值支持中文、Emoji 和其他 Unicode 字符。
字段名必须使用系统定义的英文名称,可用字段包括 username、name、type、host、location、load_1、load_5、load_15、cpu、memory_total、memory_used、swap_total、swap_used、hdd_total、hdd_used、network_rx、network_tx、network_in、network_out、last_network_in、last_network_out、ping_10010、ping_189、ping_10086、time_10010、time_189、time_10086、tcp_count、udp_count、process_count、thread_count、io_read、io_write、online4、online6。
客户端断开 25 秒后仍未重连,服务端才计算离线规则,避免短暂网络波动触发告警;每个节点、每条规则分别记录冷却时间。
【SSL 证书监测】证书检查使用 Go crypto/tls,不再调用外部 openssl;服务端记录到期时间、剩余天数和域名匹配状态,并保留原来的 7/3/1 天通知档位与冷却时间。回调默认校验 HTTPS 证书,仅在必须兼容自签名回调服务时设置 INSECURE_CALLBACK_TLS=true。
【CI 与测试】CI 会运行 Chromium 行为测试、Docker 服务端/客户端联通测试,并验证客户端镜像可同时构建为 AMD64 和 ARM64;
Docker 联通测试在 Linux 上覆盖客户端的 host 网络和 pid 模式,
Docker Desktop 未启用 Host Networking 时会明确提示并使用隔离 bridge 完成本地协议测试。
【致谢
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
Systemd 示例位于 service/status-server.service 。一键脚本 status.sh 也已切换到 Go 构建,但 Docker 仍是推荐部署方式。 构建和测试
Go 测试需要 Go 1.25+ ;WebUI 行为测试需要 Node.js 20+ 和 pnpm。Go 单元、协议、API、TLS 和回调测试
cd servergo test ./...go test -race ./...go vet ./...Python 客户端指标、参数与平台识别测试
cd ..python3 -m unittest discover -s clients -p ' test_*.py 'WebUI Chromium 行为测试
pnpm install --frozen-lockfilepnpm exec playwright install chromiumpnpm test:webuiDocker 镜像
docker build -f Dockerfile.server -t cppla/serverstatus:server .docker build -f Dockerfile.client -t cppla/serverstatus:client .服务端与客户端真实连接、认证和指标上报
SERVER_IMAGE=cppla/serverstatus:server \CLIENT_IMAGE=cppla/serverstatus:client \tests/docker-smoke.sh
Compose 配置
docker compose -f docker-compose-server.yml configdocker compose -f docker-compose-client.yml configDocker 联通测试在 Linux 上覆盖客户端的 host 网络和 pid 模式;Docker Desktop 未启用 Host Networking 时会明确提示并使用隔离 bridge 完成本地协议测试。CI 还会运行 Chromium 行为测试、Docker 服务端/客户端联通测试,并验证客户端镜像可同时构建为 AMD64 和 ARM64。 从旧服务端迁移
- 备份原来的 config.json 和 web/json/stats.json 。
- 原配置结构和客户端账号无需转换。
Docker 挂载目标改为 /app/config/config.json 和 /app/data。
stats.json 会按节点的 name/type/host/location 恢复月流量基线。修改这些身份字段会被视为新节点。 致谢
- 删除旧的 nginx、 manage_api.py 、 sergate 启动或监督配置。
- 启动 Go 服务端后检查 /api/health ,再观察客户端自动重连。
- BotoX: https://github.com/BotoX/ServerStatus
- mojeda: https://github.com/mojeda/ServerStatus
来源教程配图
