文档

小白系统监控器(fnmon)开发文档

这个项目是什么

fnmon 是专为飞牛 fnOS 打造的实时系统监控面板,以单个 Docker 容器运行,覆盖 CPU、内存、网络、磁盘、进程排行、应用用量 六大维度,历史数据可一键导出为 JSON。它不装驱动、不改系统文件,用 privileged + 只读挂载 /proc、/sys 的方式读取宿主指标,一个 docker run 就能获得接近群晖 DSM / 威联通 QTS 那种可视化监控体验。

技术栈与架构

仓库结构

路径 作用
app.py Flask 主程序与 SSE 推送入口(start.sh 也是 exec python3 app.py)
app_usage_tracker.py 应用量采集:进程 + Docker 资源快照,按日/周/月/年聚合写 SQLite
traffic_tracker.py 网络流量与 Docker 容器流量审计
static/index.html 前端单文件(HTML/CSS/JS,无外部依赖)
requirements.txt Flask、psutil
Dockerfile python:3.9-slim-bullseye + 系统工具 + pip 依赖,EXPOSE 5000
start.sh 本地启动脚本:exec python3 app.py
generate-fpk.py 生成飞牛 fpk 应用包
generate_icon.py 生成应用图标
cpu-monitor-proxy.conf CPU 监控相关的代理配置文件(README 未展开说明)
README.md / README-FORUM.md 主 README 与飞牛论坛发布版说明

本地开发环境

git clone http://127.0.0.1:3200/jinghui/fnmon.git
cd fnmon
pip install -r requirements.txt
python3 app.py        # 或 ./start.sh,监听 5000

本地直接跑时,依赖宿主机已装 smartctl、lm-sensors 等工具(容器内由 Dockerfile 安装);硬盘 SMART 信息需要 root 权限,本地裸跑建议用 root 或赋予 CAP_SYS_ADMIN,容器方式则用 --privileged。

配置项说明

配置键 默认值 含义
监听端口 5000 Web 面板端口(Dockerfile EXPOSE 5000,compose/docker run 都映射 5000:5000)
/var/exports 挂载的宿主目录(示例 /vol2/fnmon-exports) 数据导出的落盘目录,不挂载就省略该卷
TZ compose 示例为 Asia/Shanghai 时区,影响流量「当日/当月」统计与导出文件名
--privileged 必需 读取宿主 /proc、/sys、SMART 所需
/proc、/sys 只读挂载(:ro) 指标来源

导出路径也可以在面板的 ⚙️ 设置里改;导出文件名格式为 fnmon-export-YYYY-MM-DD-HHMMSS.json。

构建与发布

docker build -t fnmon .

已发布镜像:Docker Hub jinghui1984/fnmon。发布到飞牛 fpk 用仓库里的 generate-fpk.py(配合 README-FORUM.md 的论坛发布说明使用)。

部署方式

docker run -d --name fnmon -p 5000:5000 --privileged \
  -v /proc:/proc:ro -v /sys:/sys:ro \
  -v /vol2/fnmon-exports:/var/exports \
  jinghui1984/fnmon
version: '3'
services:
  fnmon:
    image: jinghui1984/fnmon
    container_name: fnmon
    restart: always
    ports:
      - "5000:5000"
    privileged: true
    volumes:
      - /proc:/proc:ro
      - /sys:/sys:ro
      - /vol2/fnmon-exports:/var/exports
    environment:
      - TZ=Asia/Shanghai

二次开发要点

相关链接