惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Project Zero
Project Zero
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
Know Your Adversary
Know Your Adversary
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
AI
AI
美团技术团队
人人都是产品经理
人人都是产品经理
S
Secure Thoughts
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
宝玉的分享
宝玉的分享
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
C
Cisco Blogs
大猫的无限游戏
大猫的无限游戏
Google Online Security Blog
Google Online Security Blog
L
LINUX DO - 最新话题
罗磊的独立博客
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
博客园 - 【当耐特】
K
Kaspersky official blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
F
Full Disclosure
Google DeepMind News
Google DeepMind News
V
V2EX
博客园 - 聂微东
量子位
云风的 BLOG
云风的 BLOG
C
Check Point Blog
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
Engineering at Meta
Engineering at Meta
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
The GitHub Blog
The GitHub Blog

二歪同学

Twikoo丨 邮件模板美化制作教程 - 二歪同学 MinIO to RustFS 丨一键脚本实现将对象从 MinIO 迁移到 RustFS 丝滑迁移 九号APP免折腾脚本教程,轻松搞定每日自动签到!(附开源代码) - 二歪同学 1Password 家庭组使用全攻略:常见问题与正确操作指南 - 二歪同学 Halo 插件 Umami 跨域报错解解决方案 - 二歪同学 实用教程丨通过爱快虚拟机安装完整版Home Assistant - 二歪同学 Lsky Pro 丨通过 docker 部署兰空图床开源版 + MinIO 再次上云丨 NAS 数据异地容灾备份解决方案 - 二歪同学 Better History丨浏览历史管理器汉化 - 二歪同学 PHP报错 Call to undefined function ImageCreate() 解决方案 Portainer 无法读取本地容器解决方案 - 二歪同学 绿联私有云NAS开启SSH方法 - 二歪同学 IOS微信自签注意事项及聊天记录安全备份 - 二歪同学 腾讯翻译丨谷歌翻译的替代方案,近乎完美! - 二歪同学 ATV-Bilibili-demo |在 Apple tv 上面看B站(小白/白嫖版) 黑苹果黑苹果系统更新失败解决方案! - 二歪同学 黑群晖/群晖 通过反代理实现 SSL 配置以及通过单端口外网访问所有项目 - 二歪同学 NginxProxyManager 可视化的反代理管理工具部署及操作技巧 - 二歪同学 Transmission 保种错误解决方案 - 二歪同学
浸式监控!NAS UPS 接入 Grafana,实现数据全屏可视化 - 二歪同学
二歪同学 · 2026-01-02 · via 二歪同学

最近在折腾Grafana,心血来潮将 UPS 也接入进来,用面板查看 UPS各项数据,效果还是不错的,解决了 NAS 端能看到的 UPS数据有限的问题。

效果图

IMG-BEB09ACF7FCB19A09CB8AF86D59577D7.webp

IMG-8F1C13986A157F4381B6A502BF8CB276.webp

这里以绿联 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 的各项数据已被正常抓取。

IMG-BB06EEDE0D31DEA6DFE08979E99108EF.webp

2.2 检查 Prometheus

接下来,打开 Prometheus 后台,依次点击上方菜单 Status/Target health ,如下图所示,则表示 Prometheus 也能正常获取到前面采集的 UPS 各项数据。

IMG-85784ED7D3520DF16BA4296436CCE6E1.webp

3.1 设置中文(可选)

初次登录 Grafana 主界面,你会看到整个界面是英文状态,这时候点击右上角的头像,打开 [ 个人资料 ] ,下方有语言设置,可将系统语言设置为中文。

IMG-8A864591B514AA17B5FFC41A0AE22284.webp

3.2 配置数据源

依次打开侧栏的 链接 ,选择 添加新链接 ,在右边搜索 Prometheus,数据源结果中选择 Prometheus,点击进入。

IMG-4C2199F08B32DA8BB48AA476EA9DF3C4.webp

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

IMG-A128245F829BAF22B03BA23F85F62D3D.webp

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

IMG-92F93BD5C90DEF89B0D2FB772F2BB94E.webp

3.3 导入数据面板

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

Pasted image 20260102131914.webp

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

Pasted image 20260102132441.webp

4.说明

1.该可视化面板基于编号 [15406] 进行修改,适配 APC BK650M2-CH,其他 UPS 出现数据无法获取的,可根据上方获取数据进行修改。

2.一般情况下,由于家庭消费及的 UPS,主要提供电量、负载、市电状态等数据,像频率 / 输出电压等参数只有数据中心的工业UPS 才会提供,所以原面板有些数据本身就获取不到。

5.下载链接