PiBox:一个零依赖的树莓派监控仪表盘
目录
树莓派放在角落跑服务,最让人不安的是"它现在还好吗"。PiBox 的目标很简单:任何设备、打开一个网址,就能看到这台机器的 CPU、温度、内存和磁盘 I/O。
后端:纯标准库就够了
一开始想用 FastAPI,最后发现需求小到连框架都是负担——一个 http.server 加一个后台采样线程就完成了全部工作:
# 后台线程定时采样,请求线程只读缓存
_cached_stats = {}
_lock = threading.Lock()
def _refresh():
while True:
sample = _read_cpu_sample() # /proc/stat 差分
with _lock:
_cached_stats.update(sample)
time.sleep(INTERVAL)
关键设计是采样与请求分离:指标由后台线程周期性采集进缓存,HTTP 请求永远只读内存,不会因为一次访问就去读一堆 /proc 文件。这样接口响应稳定在毫秒级,也天然限流了磁盘 I/O。
前端:会自己刷新的静态页
前端就是一个静态 HTML 页面,定时 fetch 接口刷新数字。没有构建、没有框架——部署就是把文件放进 nginx 的 webroot。Nginx 把 /api 反代到后端的 8765 端口,并用 auth_basic 加了一道密码,毕竟系统指标不该对公网裸奔。
心得
- 能用标准库就不用框架:零依赖意味着零供应链风险,部署就是把一个 .py 文件交给 systemd 或容器。
- 读缓存而非读系统:把"慢操作"收敛到一个后台线程,是这类小监控服务最值得做的优化。
- 仪表盘的克制:只展示值得盯的四个数。面板每多一个指标,就多一分"看了但没看进去"的噪音。
PiBox 至今仍在本机运行——你看到的这个博客所在的树莓派,正被它盯着一举一动。