2017-08-28 84 views
1

在RHEL-6.8机器上,我试图在特定磁盘卷上每隔几秒收集一次iostat (比如5秒)。有没有一种方法就地处理此连续流以获得所有 特定磁盘卷上的聚合“rMB/s”? ?iostat就地处理汇总rMB/s的脚本

我正在寻找shell脚本或python脚本。

例如:我运行iostat如下。

cpuNram # iostat -dmx SVM28000 SVM28001 SVM28002 SVM28003 5 

Device:   rrqm/s wrqm/s  r/s  w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 

SVM28000  10.60  0.00 21.97 4.07  1.66  0.09 137.49  0.05 2.07 0.31 11.55 0.94 2.44 

SVM28001  10.49  0.00 21.65 3.15  1.64  0.08 142.45  0.04 1.80 0.31 12.03 0.78 1.95 

SVM28002  10.96  0.00 22.40 3.06  1.71  0.08 144.43  0.04 1.70 0.31 11.86 0.76 1.94 

SVM28003  10.70  0.00 22.09 3.05  1.67  0.08 142.88  0.05 1.87 0.32 13.09 0.83 2.09 

cpuNram # 

我喜欢看到所有卷的总和rMB/s。在这个例子中,6.68 rMB/s(1.66 + 1.64 + 1.71 + 1.67)。

我想:

cpuNram # iostat -dmx SVM28000 SVM28001 SVM28002 SVM28003 | tail -n +4 | head -n -1 | awk '{s+=$6} END {print s}' 
6.68  ----> this is the aggregate I am looking for 
cpuNram # 

但我添加的时间间隔的iostat的那一刻,它没有做任何输出:

cpuNram # iostat -dmx SVM28000 SVM28001 SVM28002 SVM28003 5 | tail -n +4 | head -n -1 | awk '{s+=$6} END {print s}' 

感谢。

+2

是的。 “动画片中任何可能的东西。” Bugs Bunny把它放在循环中,延迟时间为5秒,并在循环内处理输出。 – Jack

+0

StackOverflow是关于帮助人们修复他们的编程代码。免费编码服务,教程,研究,工具,建议和图书馆的请求都是无关紧要的。 ***请***阅读http://stackoverflow.com/help/how-to-ask,http://stackoverflow.com/help/dont-ask,http://stackoverflow.com/help/mcve和参加[旅游](http://stackoverflow.com/tour),然后在此发布更多Q​​.祝你好运。 – shellter

+0

第1步 - 创建一个示例iostat输出的输入文件,以测试您的awk脚本。一旦这个工作继续进行到第2步 - 用来自其他命令的输入来测试它。毕竟,如果你有问题,那么谷歌“缓冲”和“stdbuf”。 –

回答

1

此代码的工作对我来说:

iostat -dmx SVM28000 SVM28001 SVM28002 SVM28003 5 | awk '/^SVM/ && buf < 4 {buf++; agg += $6} buf == 4 {print agg; agg = buf = 0}' 

BUF控制你多少行聚集,在你的情况下,他们4.因此,尽管缓冲区未满,您添加的$ 6价值加入。

当缓冲区已满时,打印集中并重置变量以重新开始。

+0

是的,这也适用于我的机器。谢谢@valrog。 – cpuNram

+0

顺便说一句,我修改了iostat源代码,打印聚合。但需要新的iostat安装 – cpuNram

+0

@cpuNram - 点击绿色复选标记将其作为答案。 – stevesliva