跳转到内容

外部监控: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:

  1. 勾选已启用(Enabled)。
  2. 位置(Location)和联系(Contact)按需填写,会出现在监控系统的设备信息里。
  3. 版本(Version)选 SNMP 版本 3。
  4. 填写用户名(User name)。
  5. 安全级别(Security level)选认证并加密(Authentication and privacy)。
  6. 认证类型(Authentication type)选 SHA,认证密钥(Authentication passphrase)至少 8 位。
  7. 加密类型(Privacy type)选 AES,加密密钥(Privacy passphrase)至少 8 位。
  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.1

1.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)仍然可用,外部监控提供更长的历史和跨机器的统一视图。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。