因为工作中需要监控linux系统磁盘io速率,目前是基于prometheus来做统一告警的,所以客户端也是使用的prometheus的procfs.github.com/prometheus/procfs
对于磁盘就是块设备,procfs里面已经有了相应的接口来访问快设备的速率。github.com/prometheus/procfs/blockdevice。
所以可以很快就写出如下计算当前读写总量的代码:
可是计算出来的结果和iostat的总是不一样。计算出来的结果总是大于iostat的结果。通过linux命令看了下块设备可以发现:
磁盘下面的sda的流量等于∑sda(x)。github.com/prometheus/procfs/blockdevice是读取了/proc/diskstats下面的所有设备的信息。
如果直接使用上面的代码求和,那么就会出现重复计算的问题。所以我们这里只需要求和miniorNumber是0的就可以。
所以代码修改成如下