项目/监控运维
监控运维 · 运行中

家庭监控台 Dashboard

一个页面看全家的机器:三节点状态、DeepSeek/博查余额、告警历史。

PythonDashboardJSONNginx

这是什么

监控台是跑在内网 .164 上的一个单页面,把家里和云上的四台机器收在一屏里:谁在线、CPU 内存磁盘怎么样、哪些服务挂了、探测延迟多少、DeepSeek 和博查还剩多少钱。页面本身很轻,前端就是原生 HTML + JS,后端一个 Python 服务出 /api/stats,没有框架也没有构建步骤。

为什么做

机器一多,状态就散在各处:Windows 本机要看计划任务有没有挂,香港 VPS 要 SSH 上去敲命令,模型 API 的余额得单独登录查。真出事的时候往往是最后一个知道的,Win 上报脚本停摆过三天才发现,充值那天面板还把「充值」显示成了负消耗,一眼看过去全是误解。所以干脆收进一个页面,数字要能对得上账。

现在是什么样

  • 概览条:机器在线 4/4、全站探测 21/21、需要关注 N 项、数据新鲜度(含最旧节点)
  • 四张机器卡片等高排列,服务与容器、网络端口、进程日志折叠成三块,摘要行直接给关键值
  • 全站健康探测单独成块,延迟分色(<200 绿 / <600 橙 / ≥600 红),异常优先排序
  • DeepSeek 与博查各一张余额卡片:今日/昨日消耗、近 14 天柱状图、余额分色
  • 有问题的节点自动排到最前,避免频繁跳动

状态:运行中,公网通过 Nginx 反代在 https://xiejun-server.top/con/ 可访问。

功能

  • 一屏汇总四台机器的在线状态、CPU、内存与磁盘用量
  • 服务容器、网络端口、进程日志折叠展示,摘要行给关键值
  • 全站探测单独成块,延迟颜色分级,组内异常优先
  • DeepSeek / 博查余额卡片:今日与昨日消耗、近 14 天柱状图
  • 充值不再算成负消耗:余额下降计消耗、上升计充值,只累加不抵消
  • 采集失败不清空面板,数据陈旧超过 45 分钟给出提示

技术栈

PythonJavaScriptNginxsystemdJSONPowerShell

使用 / 部署教程

部署步骤

1. 放文件

所有文件集中在 /opt/dashboard:后端 server.py、采集脚本 deepseek_balance.py / bocha_balance.py、公共统计库 balancelib.py、前端 index.html + app.js。前端是原生的,不需要构建。依赖只有 Python 3、systemd、Nginx。

2. 准备密钥

API Key 写进 /opt/dashboard/.deepseek-key,chmod 600,并加进 /opt/homelab-git/sync.sh 的排除名单,别让它进 git 备份。

3. 先手跑一次采集

python3 /opt/dashboard/deepseek_balance.py

确认 deepseek.json 里有 cny、available、daily。注意刚开始只有 1–2 个采样点,「今日消耗」要过一会儿才准,柱状图要有第二天的数据才成形。

4. 配 systemd

新增 dashboard-deepseek.service(oneshot)与 dashboard-deepseek.timer(每 15 分钟),然后:

systemctl enable --now dashboard-deepseek.timer
systemctl restart dashboard

5. 验证接口

curl -s http://127.0.0.1:9090/api/stats

看 deepseek 字段里的 cny、available、daily 条数、samples 是否正常。界面层面可以核对一次对账:今日开始余额 − 今日消耗 = 当前余额。

6. Nginx 反代

把 /con/ 反代到本机 9090,公网访问 https://xiejun-server.top/con/。改完前端记得确认公网那份 app.js 已经更新,不然看到的还是旧渲染逻辑。

7. 改前先备份

每次动 server.py / app.js / index.html 之前,先整份备份到 /root/dashboard-backup-<日期>/。回滚就是把这几个文件 cp 回去,再 systemctl restart dashboard;如果是余额部分出问题,还要 systemctl disable --now dashboard-deepseek.timer。

8. 加别的服务商

想接 Kimi、智谱之类的余额,改 deepseek_balance.py 里的 API 与解析逻辑,统计部分复用 balancelib.py 就行。

注意

  • .deepseek-key 必须 600 权限并排除在 git 同步之外;日志和 JSON 里不要落 key。
  • 采样间隔 15 分钟,如果充值和消费落在同一个窗口内,只能按净额统计(充 200 同时花 5 会显示充值 195、消耗 0)。
  • Windows 节点的 win-agent.ps1 必须存成 UTF-8 带 BOM,否则 PowerShell 5.1 按 GBK 解析会语法报错、上报直接停摆。