浸式监控!NAS UPS 接入 Grafana,实现数据全屏可视化
最近在折腾Grafana,心血来潮将 UPS 也接入进来,用面板查看 UPS各项数据,效果还是不错的,解决了 NAS 端能看到的 UPS数据有限的问题。
效果图


这里以绿联 DXP4800Plus 为例,UPS 型号为APC BK650M2-CH:
1.准备条件:
- UPS 已通过 USB 接入 NAS
- NAS 系统【控制面板/硬件与电源/不断电系统】打开 NUT Server 开关
- NAS 【控制面板/终端机】启用 SSH 服务
1.1 UPS 数据获取
进入 NAS 终端服务,获取UPS 名称等信息:
upsc -l # 执行该命令
# 输出如下信息,可获取 UPS 名称为 ups0,第一行告警忽略即可
Init SSL without certificate database
ups0
接下来尝试获取UPS 数据读取:
upsc ups0 # 执行该命令
# 输出如下信息,表示UPS数据正常获取
Init SSL without certificate database # 初始化 SSL(未使用证书数据库)
battery.charge: 98 # 电池电量:98%
battery.charge.low: 15 # 电池低电量阈值:15%
battery.mfr.date: 2001/01/01 #电池生产厂商日期:2001 年 01 月 01 日 固件年份,非电池实际生产日期
battery.runtime: 3545 # 电池剩余运行时间(秒)
battery.runtime.low: 120 # 电池低电量剩余运行时间阈值:
battery.type: PbAc # 电池类型:铅酸电池
battery.voltage: 13.7 # 电池实时电压
battery.voltage.nominal: 12.0 # 电池标称电压:
device.mfr: American Power Conversion # 设备生产厂商(APC)
device.model: Back-UPS BK650M2-CH # 设备型号
.......
2.部署基本环境(docker-compose)
首先,在 Grafana 根目录创建 prometheus.yml 文件,复制下方内容:
# Global配置:全局采集/评估规则,所有job默认继承此配置
global:
# 全局指标采集间隔(默认15秒,可被单个job覆盖)
scrape_interval: 15s
# 告警规则评估间隔(默认15秒,建议与采集间隔保持一致)
evaluation_interval: 15s
# 采集目标配置:定义需要监控的所有数据源
scrape_configs:
# 1. UPS数据(snmp-exporter)
- job_name: 'nut-ups'
metrics_path: /nut # 适配hon95 Exporter的按需抓取路径
params:
target: ['192.168.31.5:3493'] # 你的NAS NUT地址
ups: ['ups0'] # 你的UPS_NAME(关键!刚才指标里是ups0)
user: ['admin'] # NUT用户名(默认)
password: ['admin'] # 替换为你实际的NUT密码
static_configs:
- targets: ['192.168.31.5:9199'] # NUT Exporter地址
scrape_interval: 15s # 每15秒采集一次UPS数据
⚠️ 注意:上方文件中的部分数据根据注释进行修改,NUT 用户名/密码就是你当前 NAS 登入的用户密码,不放心可以创建一个新账户,对权限进行约束后使用。
接下来,我们需要部署 Grafana 基本环境,如果是初次配置,直接复制整个 compose 文件即可。
# 自定义桥接网络,隔离监控组件
networks:
monitoring:
driver: bridge # 修正之前的笔误(bridg→bridge)
ipam:
config:
- subnet: 172.30.0.0/16 # 自定义子网,避免和家庭内网冲突
# 核心服务配置
# 1. Grafana可视化(图表展示+报表)
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
user: root
volumes:
# 持久化Grafana配置/插件/数据(群晖路径)
- ./grafana_data:/var/lib/grafana
- /etc/localtime:/etc/localtime:ro # 同步时区
environment:
- GF_SECURITY_ADMIN_USER=admin # Grafana默认管理员账号
- GF_SECURITY_ADMIN_PASSWORD=admin123 # 默认密码(首次登录后务必修改)
- GF_USERS_ALLOW_SIGN_UP=false # 关闭注册,提升安全性
- GF_SERVER_ROOT_URL=http://192.168.31.5:3012 # 替换为你的NAS内网IP(如192.168.1.100)
ports:
- 3012:3000 # Grafana默认端口,访问用http://NASIP:3000
networks:
- monitoring
depends_on:
- prometheus # 确保Prometheus先启动
# 2. Prometheus核心(采集+存储指标)
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
user: root
volumes:
# 挂载自定义Prometheus配置文件(需手动创建,下文附模板)
- ./prometheus.yml:/etc/prometheus/prometheus.yml
# 持久化Prometheus数据(重启不丢失监控数据)
- ./prometheus_data:/prometheus
- /etc/localtime:/etc/localtime:ro # 同步时区
command:
- '--config.file=/etc/prometheus/prometheus.yml' # 指定配置文件路径
- '--storage.tsdb.path=/prometheus' # 数据存储路径
- '--web.enable-lifecycle' # 启用热重载(无需重启容器更新配置)
- '--storage.tsdb.retention.time=90d' # 数据保留90天(可按需调整)
ports:
- 9095:9090 # 映射端口(避免和NAS原有服务冲突,访问用9095)
networks:
- monitoring
depends_on:
- nut-exporter # 确保先启动采集器
# 3.UPS指标采集器
nut-exporter:
image: hon95/prometheus-nut-exporter:latest
container_name: nut-exporter
ports:
- "9199:9995"
environment:
- NUT_HOST=192.168.31.5
- NUT_PORT=3493 ## NUT默认端口,无需更改
- NUT_USER=admin # 这里是你的 NAS 用户名
- NUT_PASSWORD=admin123 # 这里是你的 NAS 密码
- NUT_UPS_NAME=ups0 # 前面获取的UPS名称
restart: unless-stopped
如果你已经部署好了 Grafana + prometheus,则只需要部署第三个 nut-exporter 容器即可。
2.1 环境测试
当所有容器正常启动之后, 首先测试 nut-exporter 是否能正常获取到 UPS 的各项数据。
如果你正常输入 http://192.168.31.5:9199 ,你会看到浏览器输出下方信息:
Prometheus NUT Exporter version 1.2.1 by HON95.
Usage: /nut?target=<target>
这是因为该容器采用「按需抓取」模式(而非常规默认暴露 /metrics),需要通过指定 target 参数才能获取 UPS 指标。
http://192.168.31.5:9199/nut?target=192.168.31.5:3493&ups=ups0&user=admin&password=admin123
所以,将上方链接中的 IP、UPS 名称、账户和密码修改成你自己的,然后在浏览器中打开。
不出意外,你将会获取到下图页面,表示 UPS 的各项数据已被正常抓取。
2.2 检查 Prometheus
接下来,打开 Prometheus 后台,依次点击上方菜单 Status/Target health ,如下图所示,则表示 Prometheus 也能正常获取到前面采集的 UPS 各项数据。
3.配置 Grafana 可视化面板
3.1 设置中文(可选)
初次登录 Grafana 主界面,你会看到整个界面是英文状态,这时候点击右上角的头像,打开 [ 个人资料 ] ,下方有语言设置,可将系统语言设置为中文。
3.2 配置数据源
依次打开侧栏的 链接 ,选择 添加新链接 ,在右边搜索 Prometheus,数据源结果中选择 Prometheus,点击进入。

在 Prometheus server URL 这里输入 http://[NAS IP ]+端口,例如 http://192.168.31.5:9095

最后滑到页面最底部,点击 保存并测试 ,出现下图提示,则表明连接成功。

3.3 导入数据面板
回到主页面,点击左边侧栏的仪表盘 ,选择右上方的 新建 按钮,在下拉选择导入面板。

选择 上传仪表板 JSON 文件,将我修改好的 JSON 文件导入,下方的数据源选择你创建好的prometheus,然后保存即可(下载链接在末尾)。

4.说明
1.该可视化面板基于编号 [15406] 进行修改,适配 APC BK650M2-CH,其他 UPS 出现数据无法获取的,可根据上方获取数据进行修改。
2.一般情况下,由于家庭消费及的 UPS,主要提供电量、负载、市电状态等数据,像频率 / 输出电压等参数只有数据中心的工业UPS 才会提供,所以原面板有些数据本身就获取不到。


