NAS 监控 1.0 预览版
「系统 → NAS 监控」管首页 NAS 概览的数据从哪来:pt-tools 所在的主机(本机来源)与接入的 NAS(现在能接入 TrueNAS、Glances,以及实验性的群晖与飞牛)。pt-tools 在后台定时读这些来源,读到的数据放在内存里;首页和这一页显示的都是内存里的数据,打开页面不会再去连一次。
本机来源
本机来源读 pt-tools 所在主机的 /proc 与 /sys:CPU 使用率、负载、IO 等待与 CPU 温度(主机有温度传感器时),内存,运行时长,以及主机名、CPU 型号与核数、内核版本。
- 只支持 Linux。在 Windows、macOS 上这一行写
本机来源只支持 Linux,开关不能打开。 - pt-tools 在 Docker 里时,读到的是宿主机的 CPU、内存与负载。
- 读不到网卡、存储池、硬盘与告警。首页的网络那张卡换成下载器速度,存储换成下载盘与媒体库所在的盘。
- 默认开着。关掉以后不再读,首页没有别的能显示的来源时是空状态卡。
TrueNAS
接入 TrueNAS 25.04 或以后的版本。pt-tools 用一把只读的 API Key 连它的 JSON-RPC 接口(wss://<地址>/api/current),一条连接一直连着,连上时登录一次。读到的:
- 主机:主机名、版本、CPU 型号与核数、内存总量、运行时长与负载
- CPU 使用率与温度、内存;虚拟机里通常读不到 CPU 温度,首页的 CPU 卡写
读不到温度 - 网络:连着的物理网卡合计的收发速度
- 存储池:状态、健不健康与容量。容量按根数据集的已用与可用算,是扣掉校验盘以后能存的;读不到根数据集的池按裸容量算(含校验盘)
- 硬盘:型号、机械盘还是固态盘或 NVMe、大小、温度与所在的存储池;不读序列号
- 告警:在 TrueNAS 上没关掉的告警,常见的几类写成中文,其余用 TrueNAS 自己的说明
- 应用:运行中、共几个、几个可以更新
第一次连上时,把 TrueNAS 记下的最近 30 分钟的 CPU、内存与网络补进首页的柱子。
准备只读的 API Key
- 在 TrueNAS 的「Credentials → Users」点「Add」,建一个只给 pt-tools 用的用户:打开「Disable Password」,「Auxiliary Groups」选
truenas_readonly_administrators(只读管理员),不勾「SMB User」,不给 sudo。 - 在 TrueNAS 右上角的用户菜单点「My API Keys」→「Add」,「Username」选这个用户,保存后复制 Key。Key 只显示这一次,没复制到就在这把 Key 的编辑里点「Reset」重新生成。
- 在 pt-tools 的「添加来源」里类型选 TrueNAS,地址写 TrueNAS 网页的 https 地址(例如
https://192.168.1.10,改过端口的写上端口),粘贴 Key,点「测试连接」。TrueNAS 默认用自签证书:核对证书的 SHA-256 指纹和 TrueNAS 上的一样以后,点「信任这张证书并再测一次」,连上了再保存。
- 只收
https://地址。TrueNAS 会吊销经 http 用过的 API Key,pt-tools 不会经 http 发 Key。 - 只读管理员读得到这些数据,改不了设置:pt-tools 不会改 TrueNAS 上的任何东西,也不会关掉它的告警。
- Key 在 TrueNAS 上被删或吊销以后,这个来源变成
登录失败。重新建一把,编辑这个来源填上新的 Key。 - 版本早于 25.04 时,测试连接写
这台 TrueNAS 没有 /api/current 接口(HTTP 404):要 TrueNAS 25.04 或以后的版本。
Glances
Glances 是通用的系统监控程序。群晖、飞牛、Unraid、OMV 这类能跑 Docker 的 NAS 上用官方镜像跑一个 Glances,pt-tools 读它的 REST 接口(http://<地址>:61208/api/4/…)。接入 Glances 4,在 4.5.8 上验证过;Glances 5 的接口换成了 /api/5,现在不支持,测试连接时会写明。TrueNAS 用上面的 TrueNAS 来源,读到的更全;群晖、飞牛也可以用下面实验性的群晖、飞牛来源直接读。
读到的:
- 主机:主机名、系统与版本、CPU 型号与逻辑核数、运行时长与负载
- CPU 使用率、IO 等待与温度(主机有温度传感器时),内存
- 网络:连着的物理网卡(
eth、en、wl等开头的)合计的收发速度;网桥、聚合口、VLAN 与 Docker 的虚拟网卡不算,同一份流量不会算两遍。一块这种名字的网卡都没有时(例如 FreeBSD 的ixl0),除了虚拟网卡都算 - 存储:挂进 Glances 容器的目录所在的文件系统,按已用与总量算;同一块盘挂了几处只算一次,ZFS 按池合计。Glances 不给健康状态,首页的存储池不写健不健康
- 硬盘:只有温度。NVMe 盘写成
NVMe 1、NVMe 2;SATA 盘要 NAS 加载了drivetemp模块才有。Glances 不给型号与容量 - 告警:Glances 不给 NAS 自己的告警。打开 Glances 的 raid 插件以后,软 RAID(mdadm)阵列没在运行或降级时记一条严重告警(见 软 RAID);没打开时首页的告警一块写原因
- 应用:Docker 容器运行中、共几个;不知道哪些可以更新
pt-tools 不读 Glances 的历史:首页的柱子从连上以后开始画,不像 TrueNAS 那样补上最近 30 分钟。
系统体检的「NAS」一组对 Glances 来源看连没连上、硬盘温度与软 RAID 阵列;Glances 不给存储池的健康,这一条不看。
在 NAS 上跑 Glances
用官方镜像建一个容器,compose 的写法:
services:
glances:
image: nicolargo/glances:4.5.8-full
restart: unless-stopped
network_mode: host # 看得到 NAS 的网卡,主机名也是 NAS 的
pid: host
environment:
- GLANCES_OPT=-w
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # 读容器
- /etc/os-release:/etc/os-release:ro # 显示 NAS 自己的系统名
- /volume1:/volume1:ro # 要看的存储目录,只读挂进去- 镜像标签写 4.x 的版本号,不用
latest:latest以后会换成 Glances 5。 - 网络要用 host。用默认的 bridge 网络时,Glances 只看得到它自己容器的网卡;pt-tools 认得出这种情况,网络一项写
Glances 的容器没用 host 网络…,不把容器自己的流量当成 NAS 的。 - 群晖在 Container Manager 里新建项目,贴上面的内容,存储目录是
/volume1、/volume2;飞牛、Unraid、OMV 用各自的 Docker 管理页面,存储目录换成自己的。 - 在 pt-tools 的「添加来源」里类型选 Glances,地址写
http://NAS 的地址:61208(http://地址不写端口时按 61208),点「测试连接」,连上了再保存。
认证
Glances 默认不开认证,局域网里谁都能读到这些数据。要开认证(Glances 文档里的做法):
- 在容器里生成密码文件:
docker exec -it glances glances -s --password,输两遍密码,问要不要保存时答Yes,再按 Ctrl+C 退出。用户名默认是glances。 - 把密码文件拷出来:
docker cp glances:/root/.config/glances/glances.pwd ./glances.pwd。 - compose 里加一行挂载
./glances.pwd:/root/.config/glances/glances.pwd:ro,GLANCES_OPT改成-w --password,重建容器。 - 在 pt-tools 里填用户名(
glances,不填时也按它)和密码。地址是http://时要勾选「我知道账号密码会以明文经过局域网,可能被截获」;不想明文传密码,就在 Glances 前面放一个带 https 的反向代理,地址写https://。
用户名或密码不对时这个来源变成 登录失败,不会自动重试。
软 RAID
Glances 默认关着 raid 插件。要看软 RAID(mdadm)阵列:
- 从镜像里拷出配置文件:
docker cp glances:/etc/glances/glances.conf ./glances.conf。 - 把
[raid]一节的disable=True改成disable=False。 - compose 里挂上
./glances.conf:/etc/glances/glances.conf:ro,重建容器。
阵列没在运行,或者在用的盘比应有的少(降级)时,首页与体检记一条严重告警;RAID 0 没有冗余,不算降级。打开了插件却没有阵列时,告警一块写 Glances 没有发现软 RAID(mdadm)阵列…。ZFS、Btrfs 自己的 RAID 不在这里。
群晖 实验性
实验性:按群晖 DSM 的 Web API 接入,只用按接口格式写的假服务测过,没有在真机上验证,读到的数据可能不全;连不上时看来源列表里写的原因。群晖上也可以跑 Glances。
pt-tools 用一个 DSM 账号登录它的 Web API(<地址>/webapi/):先查各接口的路径与版本,再登录拿到会话,之后的请求都带上会话;会话过期或被挤掉时重新登录一次。账号、密码与会话放在请求体里,不进 DSM 与反向代理的访问日志。请求与回应的格式照 Home Assistant 的群晖集成所用的 py-synologydsm-api 与 Homarr 的群晖集成记录的写。读到的:
- 主机:型号(例如 DS920+)、DSM 版本、CPU 核数与运行时长;DSM 在这里不给主机名,序列号不读
- CPU 使用率(用户、系统与其他三项之和)与负载(DSM 给的负载乘了 100,pt-tools 除回来),以及系统温度(DSM 信息中心里的那一项,显示在 CPU 卡里)
- 内存:总量与已用,已用照 DSM 资源监控里的百分比
- 网络:DSM 算好的各网卡合计(
total)的收发速度 - 存储:每个存储空间(
/volume1、/volume2…)的状态、健不健康与容量,容量是 DSM 报的已用与总量。正常、降级、已损毁以外的状态(例如修复中)照原样写,不说健不健康 - 硬盘:名字、型号、机械盘还是固态盘或 NVMe、大小、温度与所在的存储空间;序列号不读。读不到存储管理器的数据时,存储空间改读系统信息里的容量,硬盘一项写原因
- 告警与应用:现在不读 DSM 的通知与套件(包括 Container Manager),首页的这两块写原因
系统体检的「NAS」一组对群晖来源看连没连上、存储空间健不健康与硬盘温度;pt-tools 不读 DSM 的通知,告警这一条不看。
准备账号
- 在 DSM 的「Control Panel → User & Group」点「Create」,建一个只给 pt-tools 用的用户,设一个强密码。
- 「User Groups」勾选
administrators。DSM 只让管理员组的账号读系统信息与资源监控(Homepage 的群晖小组件文档也这样要求);普通账号测试连接时写这个账号读不到系统信息:DSM 只让管理员组(administrators)的账号读…。 - 「Permissions」勾最上面的「No Access」,这个账号就进不了任何共享文件夹;「Applications」先在表头勾「Deny」,再只给「DSM」这一行勾「Allow」,或者勾「By IP」,只允许 pt-tools 所在主机的 IP。
- 在 pt-tools 的「添加来源」里类型选群晖,地址写 DSM 网页的地址,填这个账号与密码,点「测试连接」,连上了再保存。DSM 默认的端口是 5001(
https://)与 5000(http://):http://地址不写端口时按 5000;https://地址不写端口时按 443(反向代理的地址),直连 DSM 要写上:5001。DSM 默认用自签证书,核对指纹以后信任它。
- 地址是
http://时,账号和密码会以明文经过局域网,要勾选「我知道账号密码会以明文经过局域网,可能被截获」。DSM 开了 HTTP 到 HTTPS 的自动跳转(「Control Panel → Login Portal」里的设置)时,测试连接写…DSM 开了 HTTPS 跳转,地址改成 https://(默认端口 5001)。 - pt-tools 只读这些数据,不改 DSM 的设置。
- 登录失败(用户名或密码不对、账号停用、没有登录 DSM 的权限、密码过期等)时这个来源变成
登录失败,写 DSM 说的原因,不自动重试:DSM 的自动封锁按登录失败的次数封 IP。被封锁时写登录失败太多次,DSM 封锁了 pt-tools 所在的 IP…,在 DSM 的「Control Panel → Security → Protection」里解除。
两步验证
账号开了两步验证时,第一次测试连接要验证码:填上验证器 App 里的 6 位验证码,再测一次。连上以后 DSM 发给 pt-tools 一个设备令牌(登录时报的设备名是 pt-tools),保存时加密存下;以后登录带上它,不用再填验证码。
- 验证码不对或过期时写
验证码不对或过期了,重新输入,再填一个新的。 - 在 DSM 上删掉了 pt-tools 这台受信任的设备(或者账号是保存以后才开的两步验证)时,这个来源变成
登录失败,写 DSM 要验证码,不再自动登录:编辑这个来源,测试连接时再填一次验证码,保存。 - 改了地址或账号时,原来的设备令牌不再用,要重新填验证码。
飞牛 实验性
实验性:按飞牛网页自己用的 WebSocket 接口接入。飞牛没有公开这套接口的文档,这是非官方的协议:pt-tools 在 fnOS 1.2.1000 的真机上验证过,飞牛升级以后可能读不到;连不上时看来源列表里写的原因。飞牛上也可以跑 Glances。
pt-tools 连飞牛网页的 <地址>/websocket?type=main(https:// 地址连 wss://,http:// 地址连 ws://),请求与回应的格式照 pyfnos 记录的写,没有用它的代码:
- 先向飞牛要登录用的 RSA 公钥。账号密码用一把一次性的 AES 密钥加密,这把密钥再用飞牛的公钥加密后发出,只有飞牛解得开。
- 登录以后飞牛给一个 token、一个长期 token 与签名密钥,之后的每个请求都带签名。这三样保存时加密存下,以后连接都用它们,不再发密码:token 过期时用长期 token 换一个新的,两样都不能用时(例如在飞牛上删了这台设备)才再用密码登录一次。
- 连接在两次读取之间一直开着,每 30 秒发一次心跳;断了以后下一次读取时重新连接。
读到的:
- 主机:主机名、飞牛的版本、CPU 型号与线程数、运行时长
- CPU 使用率、I/O 等待与负载,以及 CPU 温度(飞牛给的几个温度里最高的;虚拟机里多半读不到)
- 内存:总量与已用。已用是飞牛给的已用,与飞牛网页上的「已使用」一样(不含系统保留的那一小块);飞牛没给已用时用总量减去可用
- 网络:飞牛算好的收发速度合计,以及网卡名(不含
lo) - 存储:每个存储空间(
/vol1、/vol2…)的容量与状态。状态按它底下的软 RAID 阵列算:降级、重建中、已损毁与没在运行算不健康;同步中、调整中照原样写,不说健不健康 - 硬盘:名字、型号、机械盘还是固态盘或 NVMe、大小、温度与所在的存储空间;热备盘不列,序列号不读;飞牛给的温度是 0 时(一些 NVMe 盘是这样)不显示温度
- 应用:Docker 容器有几个在运行、一共几个;Docker 没有启动或没有容器时都是 0 个;看不出哪些能更新
- 告警:现在不读飞牛的通知,首页的告警一块写原因;存储空间降级时,存储那一块会写
系统体检的「NAS」一组对飞牛来源看连没连上、存储空间健不健康与硬盘温度;pt-tools 不读飞牛的通知,告警这一条不看。
准备飞牛的账号
- 在飞牛网页的用户设置里新建一个只给 pt-tools 用的用户,设一个强密码。
- 给它管理员权限:飞牛只让管理员读存储空间、硬盘与 Docker 容器(pyfnos 的接口说明里,存储的几个接口都写着要管理员、普通账号会回错误码 4352;在 fnOS 1.2.1000 上,普通账号读 Docker 回错误码 52429312,飞牛自己的网页也不给普通账号显示 Docker)。普通账号连上以后,CPU、内存与网络照常显示,存储空间、硬盘与容器三块写
这个账号没有读…的权限:飞牛只让管理员读…;飞牛连主机信息都不让读时,测试连接写这个账号读不到飞牛的主机信息:要用管理员账号…,不能保存。 - 在 pt-tools 的「添加来源」里类型选飞牛,地址写飞牛网页的地址,填这个账号与密码,点「测试连接」,连上了再保存。飞牛默认的端口是 5667(
https://)与 5666(http://):http://地址不写端口时按 5666;https://地址不写端口时按 443(反向代理的地址),直连飞牛要写上:5667。飞牛的 https 证书多半是自签的,核对指纹以后信任它。
- 地址是
http://时,pt-tools 连的是不加密的ws://。账号密码虽然加了密,中间人却能把飞牛给的公钥换成自己的再解开,所以这种地址一律要勾选「我知道账号密码会以明文经过局域网,可能被截获」,没填密码的草稿也一样。飞牛开了强制 HTTPS 时,测试连接写…飞牛开了「强制 HTTPS」,地址改成 https://(默认端口 5667)。 - 地址指到了别的网页(端口不对、反向代理没有转发 WebSocket)时写
这个地址没有飞牛的接口(/websocket 回了 HTTP 404)…或回的不是飞牛 fnOS 的数据…,不发账号密码。 - pt-tools 只读这些数据,不改飞牛的设置;断开连接时不注销,存下的 token 留着下次用。
- 登录失败(用户名或密码不对等)时这个来源变成
登录失败,写飞牛说的原因(飞牛说:…(错误码 …),原因里出现的密码换成***),不自动重试:一直用错的密码登录,飞牛可能锁住这个账号。
飞牛的两步验证
账号开了两步验证时,第一次测试连接要验证码:填上验证器 App 里的 6 位验证码,再测一次。验证时 pt-tools 请飞牛信任这台设备(设备名是 pt-tools),设备号随登录凭据一起存下;以后用 token 连接,不用再填验证码,要重新用密码登录时,飞牛认得这台受信任的设备,也不用再填。
- 验证码不对或过期时写
验证码不对或过期了,重新输入,再填一个新的。 - 飞牛要求这个账号开两步验证、它却没有绑定验证器时写
飞牛要求这个账号开两步验证,它还没有绑定验证器…:先用这个账号登录一次飞牛网页,按提示绑定好再测试。 - token 与受信任的设备都失效了(或者账号是保存以后才开的两步验证)时,这个来源变成
登录失败,写飞牛要验证码…,不再自动登录:编辑这个来源,测试连接时再填一次验证码,保存。 - 改了地址或账号时,原来的 token 与设备号不再用,要重新填验证码。
来源列表
每个来源一行(手机上一张卡):
| 列 | 内容 |
|---|---|
| 来源 | 名字、类型与地址(本机来源写 pt-tools 所在的主机);实验性的类型带 实验性(在真机上验证过的,鼠标停在上面时写验证过的版本),用 http:// 地址的带 明文连接 |
| 读到的主机 | 主机名、CPU 型号与核数、内存总量、平台与版本;第一次读到以前写 还没有读到数据;连上了却读不到主机信息时(群晖、飞牛的账号不是管理员)写原因 |
| 状态 | 状态与下面一行说明,有问题时再写上次读到数据的时间 |
| 操作 | 本机来源的开关;「重新连接」;接入的来源还有「编辑」「删除」 |
| 状态 | 下面一行 |
|---|---|
已连上 | 多久以前更新的(40 秒前更新) |
正在连 | 读到数据以后显示 |
连不上 | 错误原文与下次什么时候再试(30 秒后再试) |
登录失败 | 原因;改了设置或点「重新连接」以后才会再试 |
证书不受信任 | 没有发出凭据就断开了:编辑这个来源,测试连接并确认证书 |
证书换了 | 证书和信任的那张不一样,没有发出凭据就断开了:编辑这个来源,确认新证书 |
已停用 | 本机来源关着,或者接入的来源没勾「启用」 |
用不了 | 这个版本、这个平台用不了这种来源 |
连不上时按 30 秒、1 分钟、2 分钟、5 分钟再试;登录失败与证书的问题不自动重试(一直用错的密码登录,NAS 可能锁住这个账号),改了设置或点「重新连接」以后再试。「重新连接」马上试一次,不等下一次,结果写在提示里。
列表右上角的「添加来源」按类型给出要填的字段,选 TrueNAS 时上面写怎么准备只读的 API Key(见 TrueNAS),选 Glances 时写怎么在 NAS 上跑 Glances(见 Glances),选群晖、飞牛时写怎么建专用的账号(见 群晖、飞牛);实验性的类型在下拉框里带 (实验性),选了以后写在真机上验证过没有(验证过的写验证过的版本);页面下方的说明写能接入哪些、哪些在真机上验证过。
首页显示
「首页的 NAS 概览显示」选一个来源:
- 自动(默认):显示第一个能用的来源,没有时用本机。
- 本机或某个来源:一直显示它。选的来源停用了或用不了时,首页先显示别的,下拉框下面写现在显示的是哪个。
改了马上保存,不用重启;首页下次取数据时就换过来。删掉首页正在显示的来源时改回自动。
读取的频率与保存
- 每个来源每 30 秒读一次 CPU、内存与网络,每 5 分钟读一次存储池、硬盘、告警与应用。
- 最近 30 分钟的数据只放在内存里(首页的柱子就是这些),pt-tools 重启以后重新读。
- 接入的来源的密钥与登录凭据加密存在数据库里,页面上不会显示。编辑时密钥留空就是不改;改了地址或账号时要重新填,原来的密钥不会发给新的地址。
- 来源用自签证书时,在「测试连接」里核对证书指纹以后信任,以后只认这一张;证书换了会停下来等你确认,不会把凭据发给换了证书的服务。
系统体检的「NAS」一组看接入的来源:连没连上、存储池健不健康、有没有严重告警、硬盘热不热。它只看这里已经读到的数据,不再连一次 NAS。
App API、MCP 与手机 App 现在读不到 NAS 的数据,AI 助手的配置工具也改不了 NAS 监控的设置。