外观
外部监控:Prometheus、Grafana 与 SNMP
OMV 自带的监测只能发邮件,也只保留有限的历史曲线。读完这一篇,你能让 NAS 把状态暴露给外部监控系统,选对方案(SNMP 还是 node_exporter),知道该监控哪些项,并且把暴露的端口限制在监控服务器能访问的范围内。
开始之前
- 已经有一套外部监控系统,或者打算搭一套:Prometheus 加 Grafana,或者 LibreNMS、Zabbix 这类支持 SNMP 的系统。本文只讲 NAS 这一端怎么配置,监控系统本身的安装请看各自的官方文档。
- 监控服务器最好不要放在这台 NAS 上。NAS 宕机时,跑在它上面的监控系统也一起消失,你就收不到告警了。
- 命令在 OMV 的 shell(root 身份)里执行。
这两种方案都会在网络上打开一个端口
影响范围:启用 SNMP 后,NAS 在 UDP 161 上监听;运行 node_exporter 后,NAS 在 TCP 9100 上监听。它们都暴露系统的详细状态,包括进程、网络接口、磁盘和挂载点。SNMP 的 v1/v2c 和 node_exporter 默认没有任何认证。
前置条件:只在可信的内网使用;用 OMV 的防火墙或路由器,把这两个端口限制为只有监控服务器的 IP 才能访问,见 防火墙规则;绝不要把它们映射到公网。
怎么回退:在 服务 → SNMP(Services → SNMP)取消勾选已启用(Enabled)并点击黄色提示条上的应用(Apply);停止并删除 node_exporter 容器。
先选方案
| SNMP 插件 | node_exporter 容器 | |
|---|---|---|
| 配合的系统 | LibreNMS、Zabbix、Observium、PRTG 等传统网管 | Prometheus 与 Grafana |
| 安装方式 | 官方插件 openmediavault-snmp | 用 Compose 插件跑容器 |
| 数据细节 | 标准 MIB:系统、网络接口、文件系统、负载、内存 | 内核暴露的指标,细节丰富(CPU、磁盘 I/O、网络、文件系统等) |
| 认证与加密 | v3 支持认证和加密 | 默认没有,需要自己加反向代理或防火墙限制 |
| S.M.A.R.T.、RAID 状态 | snmpd 默认不提供 | 默认不提供,要另外装 smartctl_exporter 之类的采集器 |
没有现成的监控系统、想要漂亮仪表盘的,选 node_exporter;已经有传统网管、要求最小改动的,选 SNMP。两者可以同时用。
方案一:SNMP 插件
官方插件 openmediavault-snmp 提供一个 SNMP 代理(snmpd),依赖 OMV 8.3.1 或更新的版本。插件概况见 小工具合集。安装插件的方法见 安装、更新与卸载插件。
配置
入口是 服务 → SNMP。优先使用 SNMP 版本 3:
- 勾选已启用(Enabled)。
- 位置(Location)和联系(Contact)按需填写,会出现在监控系统的设备信息里。
- 版本(Version)选 SNMP 版本 3。
- 填写用户名(User name)。
- 安全级别(Security level)选认证并加密(Authentication and privacy)。
- 认证类型(Authentication type)选 SHA,认证密钥(Authentication passphrase)至少 8 位。
- 加密类型(Privacy type)选 AES,加密密钥(Privacy passphrase)至少 8 位。
- 保存,点击黄色提示条上的应用。
界面里的默认值是 MD5 和 DES,它们是老旧算法,不建议使用。
如果监控系统只支持 v1/v2c,团体(Community)的默认值是 public,一定要改成别人猜不到的字符串,并且严格限制来源 IP。v1/v2c 的团体名是明文传输的。
页面下半部分还有 Traps 的配置,可以把事件主动推送给监控服务器,需要时再启用。启用后要填团体、主机(Host)和端口(Port),数据库里的默认值分别是 public、localhost 和 162(SNMP trap 的常用端口),按接收端的实际地址和端口修改。
它实际监听了什么
OMV 生成的 snmpd.conf 把 view all included .1 加进只读视图,也就是说整棵 OID 树都对认证通过的客户端可读,并且没有限制 agentaddress,按 Net-SNMP 的默认行为会监听所有网卡的 UDP 161。认证通过后只读,不能写。
从监控服务器测试
在监控服务器上(需要装 snmp 软件包提供 snmpwalk):
sh
# v3,认证并加密
snmpwalk -v3 -u <用户名> -l authPriv -a SHA -A <认证密钥> -x AES -X <加密密钥> <NAS 的 IP> 1.3.6.1.2.1.1
# v2c,只在可信内网测试
snmpwalk -v2c -c <团体名> <NAS 的 IP> 1.3.6.1.2.1.11.3.6.1.2.1.1 是系统组,会返回主机名、描述、运行时间。常用的标准 OID 还有 1.3.6.1.2.1.2.2(网络接口表)、1.3.6.1.2.1.25.2(存储与文件系统)、1.3.6.1.4.1.2021.10(平均负载)、1.3.6.1.4.1.2021.4(内存)。
方案二:Prometheus node_exporter
node_exporter 是 Prometheus 官方的主机指标采集器,监听 TCP 9100。官方 README 给出的 Docker 运行方式是:
sh
docker run -d --net="host" --pid="host" -v "/:/host:ro,rslave" \
quay.io/prometheus/node-exporter:latest --path.rootfs=/host它需要主机网络和主机 PID 命名空间,才能看到真实的网络接口和进程;用 --path.rootfs=/host 配合只读挂载根目录,才能读到宿主机的文件系统使用情况。
用 Compose 插件部署
在 OMV 上用 Compose 插件新建一个 compose 文件,入口是 服务 → Compose → 文件(Services → Compose → Files),具体做法见 部署第一个应用。内容如下:
yaml
services:
node-exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
network_mode: host
pid: host
command:
- '--path.rootfs=/host'
- '--web.listen-address=<NAS 的 IP>:9100'
volumes:
- '/:/host:ro,rslave'要点:
<NAS 的 IP>换成 NAS 的内网地址,这样它只监听这一个地址,而不是所有网卡。- 把
latest换成你确认过的具体版本号,避免容器自动升级之后行为变化。 - 因为用了主机网络,容器没有端口映射,OMV 防火墙的 INPUT 规则会直接作用在 9100 端口上,所以要在防火墙里只允许监控服务器访问。
- 只读挂载根目录意味着容器能读到整台 NAS 的目录结构,只使用你信任的镜像来源。
让 Prometheus 来抓取
在 Prometheus 的配置里加一个抓取任务:
yaml
scrape_configs:
- job_name: omv
static_configs:
- targets: ['<NAS 的 IP>:9100']Grafana 里可以导入社区的 Node Exporter Full 仪表盘(Grafana 仪表盘 ID 为 1860),获得 CPU、内存、磁盘 I/O、网络和文件系统的一整套面板。
补充 S.M.A.R.T.
node_exporter 不采集 S.M.A.R.T.。需要的话可以另外部署 smartctl_exporter,它要访问磁盘设备,权限要求较高,按它的官方说明部署,并同样限制监听地址。
该监控什么
监控的目的是触发行动。每一条告警都要对应一个你知道怎么处理的动作,告警少而准,比多而吵有用得多。
| 类别 | 监控项 | 为什么 |
|---|---|---|
| 磁盘 | S.M.A.R.T. 健康状态与温度、重映射扇区与待处理扇区 | 坏盘前兆,见 硬盘故障预警 |
| 阵列 | md 阵列状态(降级、重建)、Btrfs 设备错误计数、ZFS 池状态 | 冗余丢失时要立刻知道 |
| 容量 | 各文件系统使用率 | OMV 自带的默认告警阈值是 85%,外部监控可以再加增长趋势预测 |
| 系统 | 平均负载、内存使用、CPU 的 I/O 等待、是否需要重启 | 资源耗尽的前兆 |
| 网络 | 接口速率、错误与丢包 | 链路降速、网线问题 |
| 服务 | SMB、NFS、SSH 端口是否可达;容器是否在运行;证书剩余有效期 | 用户感知的可用性,可用性监控见 导航页与可用性监控 |
| 任务 | 备份、同步、scrub 是否按时成功 | 用「心跳」方式监控:任务成功时通知一次,超时没通知就告警 |
检查结果
- SNMP:从监控服务器
snmpwalk能返回系统组的数据;换一个没有授权的 IP 或错误的密钥,应该被拒绝或超时。 - node_exporter:在监控服务器上
wget -qO- http://<NAS 的 IP>:9100/metrics | head能看到指标;换一个不在白名单里的 IP 访问,应该连不上。 - Prometheus 的 Targets 页面里,
omv这个任务的状态是 UP。 - 在 NAS 上用
ss -tlnup | grep -E ":161|:9100"确认监听地址是你设置的那个,而不是所有网卡。
常见问题
snmpwalk 超时。 先确认插件已启用并应用了;再检查 OMV 防火墙和路由器有没有放行监控服务器的 UDP 161;v3 要确认用户名、认证类型、密钥与加密设置三处完全一致。
node_exporter 的文件系统指标里看不到数据盘。 确认挂载 / 时带了 rslave,并且命令里有 --path.rootfs=/host。
不想让监控占用系统资源。 调低 Prometheus 的抓取频率,只保留你要用的指标。
OMV 自带的监测和外部监控重复了吗? 不冲突。OMV 的监测数据写在系统盘上,系统 → 监测(System → Monitoring)和 诊断 → 性能统计(Diagnostics → Performance Statistics)仍然可用,外部监控提供更长的历史和跨机器的统一视图。