服务器监控方式是否可以改一下
-
-
一、问题描述
在 Ubuntu 26.04.1 LTS 服务器上,XTerminal 的服务器监控功能可以正常显示 CPU、内存、网络和磁盘容量信息,但磁盘 I/O 读取速度、写入速度始终显示为
0.0 B。经过排查发现,Linux 内核能够正常统计磁盘 I/O,XTerminal 远程采集脚本也可以计算读写速度,但对于 LVM(Logical Volume Manager)逻辑卷存在设备识别和名称关联问题。
经过修改采集脚本的设备过滤规则,以及将 I/O 设备名统一为文件系统挂载源名称后,磁盘读写速度成功恢复显示。
二、问题环境
项目 环境 操作系统 Ubuntu 26.04.1 LTS (Resolute Raccoon) 内核版本 7.0.0-34-generic 文件系统 ext4 磁盘结构 SCSI 磁盘 + LVM 根文件系统 /dev/mapper/ubuntu--vg-ubuntu--lv对应块设备 /dev/dm-0XTerminal 远程采集脚本版本 26 XTerminal 客户端版本 最新版(具体版本号待补充) 重装最新远程监控脚本后,问题依然存在。
三、发现的两个问题
问题 1:采集脚本没有包含 dm-* 设备
文件路径:
~/.xterminal/sub/fs_stats/fs_stats.sh当前远程脚本版本 26 的设备过滤逻辑为:
is_tracked_block_device() { case "$1" in sd[a-z]*|vd[a-z]*|hd[a-z]*|xvd[a-z]*|nvme*n*|mmcblk*|mtdblock*|ubiblock*|loop*) return 0 ;; esac return 1 }问题:缺少
dm-*设备的匹配规则。Ubuntu 使用 LVM 时,实际逻辑卷设备为
dm-0。虽然/proc/diskstats包含该设备的 I/O 统计数据,但采集脚本会将其过滤。手动增加:
|dm-[0-9]*之后,
fs_stats.stats成功出现:- device: dm-0 rxPerSec: 0 wxPerSec: 84195 source: proc证明该设备可以正常采集。
问题 2:LVM 设备名称没有正确关联
添加
dm-0采集支持后,监控界面仍然显示0.0 B。进一步发现:
文件系统容量统计使用:
fsSize: - fs: /dev/mapper/ubuntu--vg-ubuntu--lv type: ext4 mount: /磁盘 I/O 统计使用:
fsStats: - device: dm-0 rxPerSec: 0 wxPerSec: 230286 source: proc两个名称实际指向同一个块设备,但 XTerminal 无法正确关联其读写速度。
为验证这一问题,修改采集脚本,将
dm-0对外输出的设备名改成:/dev/mapper/ubuntu--vg-ubuntu--lv修改后采集结果:
fsStats: - device: /dev/mapper/ubuntu--vg-ubuntu--lv rxPerSec: 0 wxPerSec: 68949 source: proc测试结果:XTerminal 磁盘写入速度成功恢复显示。
进一步使用
dd进行直接读取测试,产生实际磁盘读取 I/O,XTerminal 也能够正确显示读取速度。说明客户端可以展示读取和写入速度,异常与 LVM 设备名称关联具有明确关系。
四、复现与验证结果
测试操作 结果 原版脚本监控 LVM 根分区 读写速度始终为 0 检查 /proc/diskstats存在正常 I/O 数据 重装最新采集脚本 未解决 添加 dm-[0-9]*匹配规则可以采集 dm-0,但界面仍为 0将 dm-0输出为ubuntu--vg-ubuntu--lv未恢复 将 dm-0输出为完整/dev/mapper/ubuntu--vg-ubuntu--lv写入速度恢复 使用 dd产生直接磁盘读取读取速度恢复 恢复原脚本 临时修复不再保留 补充说明:低负载下读取速度为 0 是正常情况,因为实际采样结果
rxPerSec也可能为 0,不属于本次 Bug。五、原因分析
根据实际脚本及验证结果,推测存在两个需要修复的兼容性问题:
1. 远程采集脚本缺少 Device Mapper 设备支持。
当前设备过滤规则没有包含
dm-*,导致 LVM 逻辑卷不能直接进入磁盘 I/O 统计列表。2. 磁盘容量和 I/O 数据的设备标识缺少规范化关联。
fsSize.fs使用/dev/mapper/...,而fsStats.device使用dm-0。两者虽然属于同一个逻辑卷,但当前展示链路未能正确关联。将 I/O 设备名称改成与
fsSize.fs完全一致后,监控恢复正常。六、建议修复方案
建议官方从以下两方面修复:
-
完善 Linux 远程采集脚本:在
is_tracked_block_device()中支持dm-[0-9]*,确保 LVM 和 Device Mapper 设备可以被正常采集。 -
完善设备名称映射逻辑:对
/dev/mapper/...、/dev/dm-*等同一块设备的不同命名形式进行规范化关联,建议考虑 Linux 主次设备号(major:minor),避免直接通过设备名称字符串匹配。
另外,在统计磁盘总 I/O 时,建议避免将
sda、sda3、dm-0同一条存储链路的 I/O 简单相加,以免重复计算。七、结论
本次问题在 Ubuntu 26.04.1 LTS + LVM 环境下已复现,并通过修改远程采集脚本成功验证临时解决方案。
这不是 Ubuntu 内核无法提供磁盘 I/O 数据,而是 XTerminal 对 LVM 逻辑卷的采集及设备名称关联存在兼容性问题。
希望官方能够在后续版本中修复,避免用户每次更新采集脚本后需要重新手动修改。
如有需要,愿意提供复现bug的环境
-