有没有办法获取 iostat -m 的输出并实时从扩展输出中仅添加 await 列?我知道这个问题听起来很疯狂,但我需要能够实时获取所有这些列,而无需输出到文件或运行 iostat 两次,因为这会产生误导性结果。这是 centos 6.2 iostat 9.0.4。内核 2.6.36.4。总而言之,我需要这个。
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 0.56 0.00 0.00 324 485
我需要添加 await 使其看起来像这样。
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn await
sda 0.56 0.00 0.00 324 485 10.72
我在做梦吗?我是不是看错了?我需要自己编译 iostat 吗?
提前致谢。
答案1
我不确定如何获得iostat
您想要的格式。不过,我用于此类监控的工具是可自定义的,您可以显示相关字段。它还非常适合生成用于重放和绘图目的的数据。
我用集体监控(在 CentOS 中可通过 yum 获得),以及磁盘检查标志应该能满足您的需要:
collectl -sD --dskfilt sda
示例输出(您可以更改打印的单位和列):
collectl -sD --dskfilt sdb
waiting for 1 second sample...
# DISK STATISTICS (/sec)
# <---------reads---------><---------writes---------><--------averages--------> Pct
#Name KBytes Merged IOs Size KBytes Merged IOs Size RWSize QLen Wait SvcTim Util
sdb 0 0 0 0 336 0 52 6 6 0 0 0 1
sdb 16 0 1 16 389 1 52 7 7 0 0 0 3
sdb 0 0 0 0 1236 9 109 11 11 0 0 0 0
sdb 16 0 1 16 676 3 140 5 4 0 1 1 14
sdb 0 0 0 0 64 1 16 4 4 0 2 1 2
答案2
为什么不在 bash 中创建一个包装器?
单行版本如下所示:
iostat 1 2 | grep -w sda | tail -1 | awk {'print $7'}
这将运行 iostat 两次,并返回 await 的正确值(即第 7 列)
您可以使用 vmstat 执行相同操作,将右侧列传递给 awk 以获取整个 CPU iowait。例如:
vmstat 1 2 | tail -1 | awk {'print $16'}
请注意,iostat 和 vmstat 在每个 Linux 发行版上都不同,您必须选择正确的列。
答案3
这看起来像是可以用 munin、graphite 等等来监控的东西。
编辑:如果您的系统有watch
,您可以将 iostat 设置为自动运行给定(或无限重复)的次数,并在每次运行之间指定间隔! awk
输出您真正想要的字段!
答案4
重读原始问题,如果作者正在寻找实时信息,我同意 collectl 是可行的方法。这就是我写它的原因。;)
如果您想用数据做某些特定的事情,也许我可以提供帮助,但我需要了解更多信息。至于您想要的实时性,您可以选择任何您喜欢的亚秒级监控间隔。
-标记