需要实时的非常具体的 iostat 输出

需要实时的非常具体的 iostat 输出

有没有办法获取 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 是可行的方法。这就是我写它的原因。;)

如果您想用数据做某些特定的事情,也许我可以提供帮助,但我需要了解更多信息。至于您想要的实时性,您可以选择任何您喜欢的亚秒级监控间隔。

-标记

相关内容