← 全部笔记

PiBox:一个零依赖的树莓派监控仪表盘

python树莓派监控

目录

树莓派放在角落跑服务,最让人不安的是"它现在还好吗"。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 至今仍在本机运行——你看到的这个博客所在的树莓派,正被它盯着一举一动。