用于聚合的 iostat 就地处理脚本 rMB/s
Script for in-place processing of iostat for aggregate rMB/s
在 RHEL-6.8 机器上,我试图每隔几秒收集一次 iostat
(比如 5 秒)在特定磁盘卷上。有没有办法就地
处理此连续流以获得所有聚合 "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+=} 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+=} END {print s}'
谢谢。
这段代码对我有用:
iostat -dmx SVM28000 SVM28001 SVM28002 SVM28003 5 | awk '/^SVM/ && buf < 4 {buf++; agg += } buf == 4 {print agg; agg = buf = 0}'
buf 控制要聚合的行数,在您的情况下为 4。因此,当缓冲区未满时,您将 $6 的值添加到 agg。
当缓冲区已满时,打印聚合并重置变量以重新开始。
在 RHEL-6.8 机器上,我试图每隔几秒收集一次 iostat (比如 5 秒)在特定磁盘卷上。有没有办法就地 处理此连续流以获得所有聚合 "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+=} 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+=} END {print s}'
谢谢。
这段代码对我有用:
iostat -dmx SVM28000 SVM28001 SVM28002 SVM28003 5 | awk '/^SVM/ && buf < 4 {buf++; agg += } buf == 4 {print agg; agg = buf = 0}'
buf 控制要聚合的行数,在您的情况下为 4。因此,当缓冲区未满时,您将 $6 的值添加到 agg。
当缓冲区已满时,打印聚合并重置变量以重新开始。