折腾笔记

折腾笔记

群晖状态面板|把 DSM 监控和绿联 LED 控制塞进一个网页

2026-09-08

为什么要做这个

手上的这台机器是绿联(UGREEN)硬件 + rr 引导跑的群晖 DSM,平时跑了一堆容器(Emby、Immich、HomeAssistant……)。时间久了有几个痛点:

  1. 群晖自带的状态信息太分散——资源监控在「资源监控」,存储容量在「存储管理器」,容器状态在 Container Manager,想看全貌得开好几个页面。

  2. 绿联的前面板 LED 灯不受 DSM 控制,盘位灯要么常亮要么乱闪,想调亮度、改颜色、做个「有盘才亮」都做不到。

  3. 想要一个能远程打开、手机也能看的统一面板。

网上找了圈没现成的,干脆自己写了一个,用 Docker 跑,顺便开源了。

长什么样

顶部是 CPU 温度、CPU 使用率、内存、网络、运行时长;往下是存储卷、温度趋势、硬盘、M.2、LED 控制、进程排行、Docker 容器、告警历史。

功能

系统监控

  • CPU 温度(环形仪表)+ 使用率

  • 内存占用(已用 / 总量)

  • 网络实时上下行速率 + 链路速率 + 错误 / 丢包

  • 存储卷容量(volume1/2/3)

  • 温度趋势折线图(CPU + 4 块硬盘,60 秒滚动)

  • 硬盘:温度、型号、SMART、剩余寿命、坏道、读 / 写 IO

  • M.2 固态温度 / IO

  • 进程排行(可按内存 / CPU 排序)

  • Docker 容器:状态 + 内存 / CPU + 一键启停 + 查看日志

  • 告警历史(CPU 高温、硬盘高温、SMART 故障、RAID 降级、断网)

LED 控制

  • 电源灯 / 网络灯 / 4 个盘位灯独立控制

  • 开关、亮度、颜色、常亮 / 闪烁 / 呼吸

  • 自动告警联动:CPU 过热变红、硬盘高温变黄、SMART 故障变红、断网提醒

界面

  • 深色 / 浅色主题

  • 面板模块可拖拽排序,顺序自动保存

  • 右上角设置抽屉(阈值、亮度、刷新频率、恢复原始布局)

部署

前置条件

  • 群晖 DSM 7.x(我这边是 DS1825+ / DSM 7.3.2)

  • 已装 Container Manager

  • 绿联硬件的 LED 控制 CLI ugreen_leds_cli(仓库里带了一份)

拉取并运行

git clone https://gitea.zwbcc.cn/zwbpc/synology-dashboard.git
cd synology-dashboard
docker compose up -d --build

然后浏览器打开:

http://<NAS的IP>:8697

手动跑(不用 compose)

docker build -t synology-dashboard .
docker run -d --name ledcontrol \
  --network host --privileged --pid=host \
  --restart unless-stopped \
  -v $(pwd)/data:/app/data \
  -v /run/synostorage:/run/synostorage:ro \
  -v /sys:/sys:ro \
  -v /dev:/dev \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /volume1:/host/volume1:ro \
  -v /volume2:/host/volume2:ro \
  -v /volume3:/host/volume3:ro \
  -v /etc/VERSION:/host/VERSION:ro \
  -v /etc/synoinfo.conf:/host/synoinfo.conf:ro \
  synology-dashboard

踩坑记录

1. 为什么不用 SPK 套件?

一开始我是想打包成群晖套件的,结果卡在 DSM 7.x 的校验上——synopkg install 直接报 invalid package privilege content,而且提示「套件以 root 权限运行」。试过对齐 conf/privilegeconf/resource、补 checksum,甚至把已装成功的第三方套件原样复制改名,照样过不了 prepare 阶段。

结论:这个 DSM 版本对未签名第三方套件卡得很死,SPK 这条路走不通,索性改用 Docker 容器,反而更干净。

2. 容器里怎么读到宿主数据?

  • 系统指标走宿主 /proc,所以加了 --pid=host

  • 硬盘 SMART / 温度直接读群晖的 /run/synostorage/disks/<dev>/

  • 存储容量把 /volume1~3 只读挂进来,用 statvfs

  • 容器状态通过挂载 /var/run/docker.sock

  • LED 控制需要 /dev(i2c)和 --privileged

3. LED 二进制

ugreen_leds_cli 是静态链接的 x86_64 二进制,绿联 NAS 自带。仓库里带了一份,开箱即用;换了型号从自己机器上提取替换即可。

数据来源

数据

来源

CPU / 内存 / 进程 / 磁盘 IO / 网络

宿主 /proc--pid=host

CPU 温度

/sys/class/hwmon(coretemp)

硬盘温度 / SMART / 寿命

/run/synostorage/disks/<dev>/

存储卷容量

挂载的 /host/volume*

DSM 版本 / 型号

/host/VERSION/proc/sys/kernel/syno_hw_version

Docker 容器

/var/run/docker.sock + cgroup

项目地址

https://gitea.zwbcc.cn/zwbpc/synology-dashboard

需要 --privileged 和挂载 /devdocker.sock,介意的朋友自行评估风险。

记录于 2026-09-08