如何获取 iostat 第二个样本

How to get iostat second sample

iostat -x 不显示真实值。如果您 运行 iostat -x 1 并查看每秒的值,这是显而易见的。当我 运行 iostat -x 1 2 我认为我可以通过抓取确切的行然后获取值来获得我想要的值。

iostat -x 1 2 | awk '{gsub(/,/,"."); if (NR==15) printf ("%s,%s,%s,", ,  ,); else if (NR == 18) printf ("%s,", );}'

从第 15 行开始,给我 %user、%system、%iowait,从第 18 行开始,%sda。

不幸的是,我不能这样做,因为我有不止一台不同磁盘的机器。当我 运行 iostat -x sda 可能在第 18 行,第 21 行或另一行。

我怎样才能 运行 iostat -x 只得到第二个样本?或者我怎样才能得到我想要的关于这条线的价值?

我想到了 iostat -x 1 2 | awk '/^sda/ {print }' 然后只得到第二个值,但是如果我按照这种方法,我需要 8 秒才能得到我想要的所有值。

iostat -x 1 2

的输出
Linux 3.10.0-327.28.3.el7.x86_64 (sth)  13/12/2016  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,70    0,00    0,23    0,09    0,00   98,98

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0,00     0,00    0,00    0,00     0,03     0,00    38,29     0,00    0,13    0,13    0,00   0,02   0,00
sda               0,01     0,18    0,23    7,52    38,37  3132,67   819,15     1,26  162,49  219,88  160,76   3,74   2,89
sdb               0,00     0,00    0,62    0,00    78,93     0,00   255,56     0,00    0,40    0,40    0,00   0,24   0,01
dm-0              0,00     0,00    1,02    2,10    21,16   156,62   113,89     0,11   34,80    4,22   49,58   2,13   0,66
dm-1              0,00     0,00    0,00    0,00     0,01     0,00    59,16     0,00    0,54    0,36    3,15   0,42   0,00
dm-2              0,00     0,00    0,01    0,01     0,13     0,76    84,61     0,00  177,30    0,58  287,55  28,81   0,06

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,03    0,00    0,03    0,00    0,00   99,94

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
sda               0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
sdb               0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
dm-0              0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
dm-1              0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00
dm-2              0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00    0,00    0,00   0,00   0,00

这将为您提供 headers 和值的第二个实例,您可以进一步限制字段并在需要时跳过 headers

$ iostat -x 1 2 | awk '/^avg-cpu/  {c++; a=4} 
                       c==2 && a && a--; 
                       c==2 && /^sdb/'

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.31    0.00    0.22    0.00    0.00   98.47

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sdb              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

这个,没有 headers,只需选择您要打印的字段(而不是 $0)。

$ iostat -x 1 2 | awk '/^avg-cpu/        {c++; a=2} 
                       c==2 && a && !--a {print [=11=]} 
                       c==2 && /^sdb/    {print [=11=]}'

           1.78    0.00    0.78    0.03    0.00   97.41
sdb              0.00     0.00  0.00 831.00     0.00  6648.00     8.00     0.72    0.87   0.01   0.60