Skip to content
MisiteQPublic

About

全程AI没有手工的飞牛系统监控软件

Resources

Stars

28 stars

Watchers

0 watching

Forks

Repository files navigation

飞牛监控 fnMonitor

Version fnOS License

飞牛 fnOS 系统监控应用(FPK 原生应用):实时监控 CPU / 内存 / 磁盘 / 网络 / 温度 / 功耗 / GPU,支持 Docker 容器管理、端口占用、硬盘 SMART、历史趋势与七套主题。流量统计模块(整机 / 网卡 / 容器上下行流量、今日 / 本月累计、容器流量排行、CSV 导出)与功耗统计模块(实时瓦数 + kWh 耗电量 + 电费估算,无 RAPL 时自动回退 TDP 估算模型,CSV 导出)。纯 Python 标准库 + 单文件前端,零第三方依赖、完全离线可用,数据仅保存在本机。

  • 当前版本:v2.16.8
  • 作者:Misite齊
  • 适用平台:fnOS x86 + arm64(最低系统版本 0.9.0)
  • 默认端口:8777(安装向导可改)
  • 运行身份:root(需访问 sysfs 风扇控制、docker.sock、smartctl 与 /proc 跨用户进程信息)

✨ 功能

  • 🏠 总览仪表盘:状态卡片(CPU / 内存 / 存储 / 网络 / 温度 / 负载 / 运行时间 / IP)、时间·农历与天气、资源详情(每核 CPU / 内存明细 / 磁盘 IO)、硬盘信息(逐盘 SMART + SATA 告警计数)、硬件与传感器(内存插槽 SPD / 温度墙 / 电压 / 风扇)、实时功耗(Intel RAPL)与显卡监控、八维历史趋势折线图、进程 TOP
  • 🐳 Docker · 端口:容器列表与资源占用、一键启动 / 重启 / 停止、端口占用(应用 / 容器 / 系统监听)、内置应用统计(相册 / 影视 / 音乐)
  • ⚙️ 设置:监听端口、采集间隔、历史保留天数、数据导出(CSV / JSON)、一键健康报告(HTML)
  • 🎨 界面:七套主题、现代 NAS 仪表盘风格(侧边栏可收起)、每个面板 / 小模块独立显示隐藏、拖动排序自动记忆、手机端底部导航自适应

📦 安装

方式一:FnDepot 应用源(推荐)

在飞牛 fnOS 上安装 FnDepot 客户端后,添加作者的应用源即可搜索「飞牛监控」一键安装 / 升级:

https://github.com/MisiteQ/FnDepot

方式二:手动安装 FPK

  1. 到 Releases 按 NAS 架构下载:fnmonitor-2.16.8-x86.fpk(x86 机型)或 fnmonitor-2.16.8-arm.fpk(arm64 机型)
  2. 飞牛 OS → 应用中心 → 左下角 手动安装 → 选择 fpk 文件
  3. 安装后从桌面打开 飞牛监控,或直接访问 http://<NAS_IP>:8777

若「手动安装」入口被关闭,SSH 执行:appcenter-cli manual-install enable

🛠 从源码打包

需要安装 fnpack 命令行工具(Windows 下也可直接把 fnpack.exe 放到项目根目录,打包脚本会优先使用)。

构建脚本会自动读取 manifest 中的版本号,一次构建同时产出带版本号的双架构安装包:

  • fnmonitor-<版本>-x86.fpk(x86 机型)
  • fnmonitor-<版本>-arm.fpk(arm64 机型)

Windows(PowerShell 5+)

# 需 Python 3
.\build.ps1

Linux / fnOS

bash build.sh

打包过程中脚本会临时切换 manifest 的 platform 字段分别构建,结束后自动恢复原值;发布新版本时只需修改 manifest 的 version 与 changelog 后重新执行脚本。

📁 项目结构

manifest                飞牛应用清单(版本、显示名、端口、权限、更新日志)
wizard/                 安装向导(端口 / 数据目录 / 采集间隔等)
cmd/                    飞牛生命周期脚本(安装回调、启动、卸载清理、升级等)
config/                 飞牛权限与资源声明(以 root 运行)
app/server.py           后端:采集 + SQLite 历史 + HTTP API(零依赖)
app/www/index.html      前端:单文件面板(原生 JS + SVG 图表)
build.ps1 / build.sh    Windows / Linux 双架构打包脚本
make_icon.py            应用图标生成(不覆盖已有图标)

🔒 隐私与安全

  • 所有监控数据(实时指标、历史趋势、流量与功耗统计)均保存在 NAS 本机 SQLite 数据库,不上传任何第三方服务器
  • 纯 Python 标准库实现,零第三方依赖、完全离线可用,不与任何外部服务通信
  • 天气数据通过公开 API 按需获取(可在设置中关闭),不涉及个人位置信息上传

🙏 致谢

📋 版本历史

版本 内容
v2.16.8 ① 修复更新后版本号显示为旧值(2.9.7 缓存问题):HTML head 添加 meta Cache-Control/Pragma/Expires 禁止缓存,更新成功后 location.reload 改为 cache-busting URL(?v=时间戳)强制浏览器从服务器获取最新页面;② 删除"一键初始化界面"描述中残留的"云纹背景"字样;③ 修复开启上月汇总后总仪表盘不显示汇总卡片:用户刚开启功能时 monthly_summary 表暂无数据(需等 cleanup 触发归档),原逻辑 available=false 时卡片隐藏;改为 enabled=true 时无论有无数据都显示,无数据时展示"暂无汇总数据,等待后台采集归档"提示
v2.16.7 修复「上月汇总」开关点击启用后瞬间复原、功能打不开:api_config_save 保存配置到 config.json 后同步内存 self.config 时漏了 monthly_summary_enabled 字段,导致内存中始终是旧值 0,紧接着 pollMonthlySummary 回读 /api/monthly_summary 返回 enabled=false 把 checkbox 重置;现内存同步循环补入 monthly_summary_enabled;同时前端 loadConfigForm 补入开关状态加载(刷新页面后开关反映已保存配置),renderMonthlySummary 移除回写 checkbox 逻辑避免轮询覆盖用户操作
v2.16.6 新增「上月汇总」功能:在总览仪表盘顶部新增上月汇总卡片,展示上个月各项监控数据汇总(CPU/内存/磁盘/温度的均值与峰值、网络总流量、功耗 kWh 与电费、负载等),设置中可开关。核心机制:清理前增量叠加——每次 cleanup 删除过期 metrics 数据前,先把数据按月汇总 UPSERT 到独立的 monthly_summary 表(不受 cleanup 影响),即使历史保留天数不足整月(如 7 天)月度汇总仍完整不丢失;历史保留天数 < 31 时在设置页与卡片中提示「已自动叠加保存汇总统计」
v2.16.5 修复长期运行后内存冲顶不回落(issue #3):历史导出(/api/export?range=all)与流量统计 / 健康报告路径的查询结果被误挂入「休眠读缓存」_read_memo 永久持有——全表 fetchall() 可达数百万行(实测 692 万行),一次导出即 +1.44 GiB RSS 且 32 秒内不回落。根因:_memo 缓存本为「休眠硬盘不被面板轮询唤醒」设计,但被误用到导出路径——导出是用户主动的一次性操作,下次可能要不同范围或最新数据,缓存它毫无意义。修复:导出路径(export_rows / export_net / query_prefix)改为不挂缓存,函数返回后 GC 回收;_memo 仅保留给面板轮询触发的 query()(休眠保护核心场景);全表查询加 LIMIT 1000000 保护防止极端积累;休眠保护仍生效(休眠时返回空列表,不读 db 唤醒硬盘)
v2.16.4 修复「时间·农历」显示与真实农历不同步:公历转农历的经典查表算法在改写时引入三处错误——① 年份回补误用「下一年」的天数(相邻农历年天数不同,闰月年后的日期整体错 1~2 个月,如 2025-06-25 误显「四月廿九」,实为六月初一);② 月份回补同理,且闰月标志扣完后未复位,闰月之后所有月份都被错标成「闰」(出现「闰七月」「闰腊月」);③ 日干支常数错误(+50 应为 +17),干支日柱长期算错。已用 1950–2048 共 36000 天逐日连续性自检、多个春节/除夕跨年与 2020 闰四月、2023 闰二月、2025 闰六月边界、1949-10-01 甲子日等干支锚点验证,并对照权威万年历(2026-10-06 正确为丙午年八月廿六·癸丑日,旧版错显八月廿七·丙戌)
v2.16.3 修复已安装最新版仍提示「发现新版本」:应用内更新检测使用的版本号常量此前硬编码且未随 2.16.x 系列升级(停留在 2.15.1),与线上最新版比较时永远判定有新版;现版本号改为启动时从 manifest 动态读取,全应用版本号以 manifest 为唯一数据源,发版不再遗漏。修复「关于 / 软件更新」模块版本号与已安装版本对不上:侧边栏与页脚版本号此前硬编码 v2.15.1 残留;现四处版本显示(侧边栏 / 页脚 / 关于 / 更新模块)统一由 /api/config 接口实时下发,永远与已安装版本一致
v2.16.2 修复「独立网页」模式点击桌面图标无反应 / 仍弹内嵌窗口的根因:真机实证飞牛桌面入口的真实数据源是系统数据库(应用中心 appcenter.app_service/app_open + 桌面服务 trim_sac.entry),磁盘上的 ui/config 仅在安装 / 升级时被读取物化——此前只改写配置文件,系统数据库仍为旧值,导致桌面按旧方式打开、甚至查不到条目而点击静默无效。现保存打开方式 / 端口时直接幂等同步数据库(仅在存在差异时 UPDATE),保存不再重启应用中心服务,刷新飞牛桌面(F5)即生效;应用每次启动也自动校验数据库入口一致性并自愈。已在真机完成 url ↔ iframe 双向回归(独立网页:浏览器新标签页直开、无内嵌窗口;飞牛窗口:内嵌窗口正常渲染)。打包调整:构建脚本一次产出 fnmonitor-<版本>-x86.fpk / fnmonitor-<版本>-arm.fpk 双架构带版本号安装包
v2.16.1 修复切换「独立网页」后点击桌面图标仍弹出内嵌窗口:桌面入口配置(ui/config)此前只写入应用可执行目录,而 fnOS 应用中心与桌面实际从应用基础目录 /var/apps/{应用ID}/ 读取——现同步写入全部入口配置位置(基础目录缺失时自动补建),并重启应用中心服务使配置重读(该重启方案在 v2.16.2 已被数据库直写取代)
v2.16.0 重构「飞牛桌面打开方式」切换机制:可选择点击桌面图标时在飞牛窗口(iframe)内打开或在浏览器新标签页(url,完整浏览器能力:全屏 / 下载 / 插件)独立打开,保存后自动改写桌面入口配置并重读;iframe 内误开时窗口内显示一键转跳浏览器的引导页。修复修改监听端口后桌面图标打不开:改端口保存及应用启动 / 升级时自动把桌面入口配置的端口同步为实际监听端口(此前始终指向默认 8777)
v2.15.1 修复天气城市搜索不准:新增内置中国行政区划坐标库(省/市/县三级 3200+,来源阿里 DataV GeoAtlas,与 QWeather 同源),国内城市名一律本地检索(名称精确 > 前缀 > 包含)——此前 Open-Meteo 地理编码基于 GeoNames,中国城市中文覆盖差,部分城市(如常州、温州、驻马店)搜不到、同名地点错配(如佛山解析到云南、东莞坐标偏到海南);未命中再回退 Open-Meteo(国际城市/拼音),「纬度,经度」与自动定位逻辑不变;天气卡显示名带省份消歧(如「佛山市(广东省)」)
v2.15.0 新增硬 RAID 物理盘温度与健康监控(LSI/Broadcom storcli 通用):MegaRAID(含 Dell PERC 贴牌)RAID 模式下物理盘不作为 /dev/sdX 暴露给系统、smartctl 不可见,现经 storcli/perccli 的 JSON 输出结构化解析——「阵列设定」面板展示控制器型号与 ROC 芯片温度、虚拟阵列(VD)状态、每块物理盘的盘位/型号/介质/容量/状态/温度/健康/介质错误表格;健康自动分级(SMART 告警与离线/丢失 → 故障,介质或预测失败计数 > 0 → 警告,重建中 → 重建,其余正常)。storcli64/storcli/perccli64/perccli 全自动查找(含 /opt/MegaRAID、/usr/local/bin 等常见路径),检测到阵列卡但未装工具时给出安装指引、装好即自动识别;HBA 直通卡(IT 模式)仍走标准 SMART 路径。阵列卡识别按优先级修正(RAID > HBA/SAS > 存储控制器 > SATA 控制器),纯 SATA 主板不再误报为阵列卡;RAID 物理盘温度并入总览温度卡(名称形如「阵列 32:0」)。温度与 SMART 由阵列卡读取传感器数据、不寻道,不会唤醒 STANDBY 休眠硬盘
v2.14.0 休眠硬盘保护(不再周期性唤醒机械硬盘):电源状态检测只使用非唤醒命令(smartctl -n standby / hdparm -C,8 秒缓存,工具缺失自动退避);休眠盘的容量 statvfs、SMART 详情、硬盘温度、历史库写入/清理、内置应用目录扫描全部跳过并沿用上一次活跃数据,历史采样在硬盘唤醒后自动补写不丢点;前端面板轮询触发的历史库 SELECT 同样门控(休眠期间返回休眠前缓存数据,杜绝开着面板把盘唤醒);设置页新增「休眠硬盘保护」开关(默认开启,可一键关闭恢复完整采集)。整机功耗口径修正:RAPL 仅测得 CPU 封装功耗(如 N5095 空闲仅 2-3W,与插座实测差距大),现整机功耗 = CPU 封装 + 内存 + 主板/其他固定底座(默认 8W,可在设置中按插座实测补差)+ 活动硬盘功耗(休眠盘不计),实时面板展示各分项与口径说明。应用端口显示实际监听值:不再只信 manifest 的安装默认端口,改为通过 ss 监听端口 + /proc 进程归属(cmdline/exe/cwd/cgroup 引用 @appcenter/@appdata/<appid>)交叉校验,如应用默认 8000 实际运行在 8899 时显示粗体实际端口并灰字标注默认值,新增「运行中/未运行」状态
v2.13.2 EC 硬件监控邮箱改为机型无关自动识别(通用补丁):v2.13.1 的 0xA20 三端口邮箱读取仍带 NEC / LENOVO 厂商白名单,本版彻底移除品牌限制——任意品牌机器只要硬件上确实存在这组监控邮箱即可读出风扇。为保证对无关主机零风险,启用改为三道纯硬件闸口:① /proc/ioports 存在 0a20 端口区且由 PnP 固件设备占用(端口不存在时芯片组直接丢弃 IO;被内核驱动占用则跳过避免冲突);② 首次访问先读 bank1 温度寄存器做应答合法性验证(须回真实温区数据,空总线恒回 0xFF/0x00 一律拒绝);③ 风扇仍保留 300–30000 RPM 合理性校验。验证失败结果进程内缓存,不再访问该端口;数据口全程只读、首末写 0xFF 为固件自身复位序列。已在联想机去掉白名单后实测读数不变(约 1640 RPM),NEC/其他品牌 ODM 同协议 EC 均可即插即用
v2.13.1 联想 ThinkCentre 等商用小主机风扇转速支持:实测 LENOVO ThinkCentre(3172 主板 / i5-10400)与 NEC Mate 的 EC 固件同源,均通过 0xA20/0xA21/0xA22 三端口硬件监控邮箱暴露风扇转速(DSDT HWMB/HWMG/GFAN,bank1 0x40–0x47,与 BIOS 同源;空闲约 1640 RPM、满载约 1940 RPM 实时跟随);原 v2.13.0 仅对 NEC DMI 放行导致联想机型读不到,本版扩为 NEC/LENOVO 白名单 + 0a20 端口闸口(2.13.2 已进一步去除品牌限制)
v2.13.0 风扇转速数据源扩展(通用自动识别):标准 hwmon/sensors 之外新增三个只读数据源——① IPMI/BMC:服务器及带管理控制器主机,安装 ipmitool 后自动读取;② ThinkPad/ThinkCentre ACPI:thinkpad_acpi 的 /proc/acpi/ibm/fan 零依赖直读;③ NEC 商用机私有 EC 邮箱:NEC Mate 等机型风扇接在 0xA20 三端口邮箱、Linux 无驱动(BIOS 可见转速但 hwmon/ACPI 全为桩),按固件 GFAN 协议只读转速寄存器、与 BIOS 同源,DMI 白名单保证非 NEC 主机零影响;无任何风扇数据源时界面明确提示(原因与 ipmitool 解决建议),不再静默空白;数据源来源随 fans_source 字段输出,异常隔离不影响其它监控
v2.12.3 修复「风扇平均转速」在部分主机始终无数值:该模块原先仅解析外部命令 sensors -j(lm-sensors 软件包),fnOS 等精简系统默认未安装该命令时,即使 BIOS 中可见风扇转速、内核已驱动风扇芯片,趋势图也读不到任何数据;现改为合并直接读取内核 /sys/class/hwmon 风扇通道(与 sensors 同源、零外部依赖),未装 lm-sensors 也能正常显示,两数据源按芯片+通道号自动去重;同时兼容部分 Nuvoton/ITE 芯片把属性挂在 hwmonN/device/ 下的旧 sysfs 布局,风扇手动调速 / 恢复自动温控路径同步修正;sysfs 读取异常已隔离,不影响温度等其它传感器
v2.12.2 更新应用图标:更换为新的应用图标,桌面 / 应用中心 / 包内图标统一更新;构建脚本 make_icon.py 已改为绝不覆盖已存在的用户自定义图标(已存在的图标文件生成与复制步骤均跳过)
v2.12.1 修复内置更新后飞牛应用中心版本号不刷新:内置更新此前只覆盖了应用可执行文件目录(target,即 TRIM_APPDEST)下的 manifest,而飞牛应用中心实际从应用基础目录 /var/apps/{appname}/manifest 读取版本号;现已同步把新版 manifest / ICON 复制到应用基础目录,内置更新后应用中心版本号立即刷新为最新版本(升级到本版本的那一次更新仍由旧代码执行,应用中心版本号需待下一次内置更新后刷新)
v2.12.0 修复处理器核心/线程数读取错误:此前把逻辑线程数误当物理核心数、单插槽线程数误当整机线程数,超线程 CPU 显示「8 核 / 8 线程」、多路 CPU 完全错误;现改用 lscpu 拓扑(Socket × Core/socket)+ cpuinfo 去重回退,核心/线程/插槽均准确(x86 与 ARM 适配);CPU 使用率口径修正:每核柱形改为系统 CPU 编号、超线程下标注逻辑线程口径,CPU 时间统计纳入 steal(虚拟机内更准);修复两处功耗不一致且虚高:RAPL 总功耗此前把封装+核心+非核心+内存重复相加(封装已含核心/非核心),现整机=封装+内存,实时功耗与功耗统计完全同源;AMD/ARM 无 RAPL 时统一显示模型估算值并标注来源,不再实时面板「不可用」而统计页有数据;新增设置「飞牛桌面打开方式」:可选飞牛窗口内打开(iframe,新默认)或浏览器新标签页独立打开(url),选择保存在 NAS、升级后自动保持
v2.11.0 新增「流量统计」:今日 / 本月 / 开机累计上下行流量、容器流量 TOP 10、累计流量趋势图,支持导出 CSV,可配置排除 Docker 网桥流量;新增「功耗统计」:今日 / 本月 kWh 与电费估算、累计 kWh 趋势、硬盘休眠状态,无 RAPL 时自动回退估算模型(可配置 TDP / 电价 / 单盘 / 网卡功耗);界面整合:流量统计与功耗统计并入「资源趋势」面板、温度墙并入硬件面板(「硬件与温度」)、阵列设定并入磁盘信息、进程 TOP 默认放最后;数据可用性自动隐藏:启动 5 分钟后自动隐藏从未返回数据的面板;图表优化:修复累计趋势图闪烁、折线图按实际宽度绘制坐标文字统一、隐藏同排模块后自动撑满;硬盘休眠校对:剔除 dm 虚拟设备仅显示物理硬盘
v2.9.9 修复「自动更新」等在线更新开关在重启 / 升级后不保存:启动加载配置未读取这三个字段导致开关回落默认值,现已加入加载白名单,重启 / 升级后设置完整保留
v2.9.8 修复飞牛手机 APP 端界面设置不保存(启动门禁防止默认布局覆盖服务器配置);保存失败浮动提示并自动重试;ui.json 原子写入 + 自动备份回退,配置不再整体丢失
v2.9.7 修复内置更新后 fnOS 应用管理中心版本号不刷新:新版 manifest 此前被误写到应用目录上一级,现已统一覆盖到应用目录内,与「关于」页版本一致(从本版本之后的内置更新生效;应用中心升级不受影响)
v2.9.6 移除云纹背景装饰功能:撤销 v2.9.4 / v2.9.5 引入的云纹背景与设置开关,页面与面板恢复纯色背景;界面配置向后兼容,旧配置残留字段自动忽略
v2.9.5 云纹背景全新纹样:金色螺旋涡卷云头 + 流水波浪线(传统霞纹构图),300×300 矢量单元无缝平铺、均匀分布不堆积,随主题明暗自适应
v2.9.4 设置页分组重排(界面外观 / 数据 / 服务 / 更新与关于四组);数据导出移入设置页「数据」组;新增云纹背景装饰(半透明祥云纹理,随主题自适应,可随时开关并跨设备同步)
v2.9.3 软件更新模块合并重构;修复「下载到本电脑」(iframe 弹窗拦截)与「下载到 NAS」(支持自定义保存文件夹);新增「立即更新」一键升级与「自动更新」开关(自动下载+安装+重启,带备份回滚);字体默认=2.8.4 原始大小
v2.9.2 内存明细堆叠横条加粗(9→14px,图例色块同步加大);新增「字体大小」设置:90%/100%/110%/125% 四档整体缩放,即时生效并自动同步 NAS 端界面配置
v2.9.1 界面设置同步与数据保存目录合并(移除重复的「修改保存目录」按钮);数据目录输入框加宽并新增「取消」还原按钮
v2.9.0 新增「关于」(软件简介 / 作者 GitHub / 项目地址)与「软件更新」:GitHub Releases 在线检查更新、新版红点提示、安装包下载到 NAS 或经 NAS 代理下载到电脑、可选每 6 小时自动检查并自动下载;明确所有数据保存在 NAS 服务器端,移除浏览器端天气位置存储
v2.8.5 界面设置同步区块显示同步数据(ui.json)当前实际保存路径,新增「修改保存目录」按钮一键跳转到数据目录设置
v2.8.4 大幅降低 CPU / 内存占用:历史库清理降为每小时、重采集降频、接口结果缓存复用(多设备不再成倍消耗);HTTP 长连接 + 限制 glibc arena 解决内存虚高;后台标签页自动暂停轮询
v2.8.3 接入 FnDepot 外部应用源(仓库根目录 fnpack.json 索引,可在 FnDepot 客户端直接安装 / 升级);无功能代码变更
v2.8.2 修复 F11 全屏时浏览器标题栏 / 菜单栏不受控弹出(改走全屏 API + 顶栏全屏按钮);手机底部虚拟按键适配:底部导航 / 悬浮按钮自动上移,不再被三键导航遮挡
v2.8.1 修复「存储总使用」统计不准:按文件系统 ID 精确去重(存储池子卷 / 设备别名不再重复计算),排除网络挂载盘,口径与 fnOS 存储页对齐
v2.8.0 修复资源趋势历史数据不显示(打开即加载全部历史);侧边栏支持收起 / 展开;界面美化
v2.7.1 修复小模块显示不全与平板竖屏适配

完整日志见 Releases。

📄 许可证

MIT License © 2026 Misite齊

About

全程AI没有手工的飞牛系统监控软件

Resources

Stars

28 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages