Help with iostat

Hello, I support Oracle 11g on AIX 7.1.

Using the command

$iostat -D hdisk2 hdisk4 hdisk5 5

I get the following output:

hdisk5         xfer:  %tm_act      bps      tps      bread      bwrtn    
                        44.0      1.4M   178.2        1.4M      14.7K
               read:      rps  avgserv  minserv  maxserv   timeouts      fails
                       174.6      3.0      0.2    279.7           0          0
              write:      wps  avgserv  minserv  maxserv   timeouts      fails
                         3.6      0.4      0.2     11.2           0          0
              queue:  avgtime  mintime  maxtime  avgwqsz    avgsqsz     sqfull
                         0.0      0.0     12.1      0.0        0.0         0.0
hdisk2         xfer:  %tm_act      bps      tps      bread      bwrtn    
                        87.4     14.0M   1544.1       12.1M       1.9M
               read:      rps  avgserv  minserv  maxserv   timeouts      fails
                       1441.0      1.7      0.2    316.7           0          0
              write:      wps  avgserv  minserv  maxserv   timeouts      fails
                       103.1      0.4      0.3     57.9           0          0
              queue:  avgtime  mintime  maxtime  avgwqsz    avgsqsz     sqfull
                         0.4      0.0    123.8      0.0        2.0        89.7
hdisk4         xfer:  %tm_act      bps      tps      bread      bwrtn    
                        93.0      2.8M   319.4        2.7M       1.6K
               read:      rps  avgserv  minserv  maxserv   timeouts      fails
                       319.2      3.0      0.2    312.3           0          0
              write:      wps  avgserv  minserv  maxserv   timeouts      fails
                         0.2      0.3      0.3      5.1           0          0
              queue:  avgtime  mintime  maxtime  avgwqsz    avgsqsz     sqfull
                         0.0      0.0     17.9      0.0        0.0         0.0
--------------------------------------------------------------------------------

I find this difficult to parse using awk or any other tool because for each iteration all the titles are printed again rather than repeating the value for the metric like vmstat does. That's a lot easier to capture the value for the metric.

kthr    memory              page              faults              cpu          
----- ----------- ------------------------ ------------ -----------------------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa    pc    ec
 6 10 8800952 26424   0   0   0 7461 39909   0 4040 39689 12081 52 14 26  8  4.96  67.0
 5  3 8800817 24651   0   0   0 9434 108818   0 2357 8227 7222 47 12 33  8  4.47  60.4
 7  3 8801897 24468   0   0   0 31695 95003   0 3339 6179 8625 51 19 23  8  5.21  70.3

Does anyone have an idea how to parse this output so that it could be output to a CSV file and loaded into a spreadsheet?

Many thanks.

iostat -D hdisk2 hdisk4 hdisk5 5 | awk ' BEGIN {
printf "dev,%tm_act,bps,tps,bread,bwrtn,"
printf "read: rps,avgserv,minserv,maxserv,timeouts,fails,"
printf "write: wps,avgserv,minserv,maxserv,timeouts,fails,"
printf "queue: avgtime,mintime,maxtime,avgwqsz,avgsqsz,sqfull"
} {
        for(i=1;i<=NF;i++) {
                if($i~/^hdisk/) {
                        printf "\n%s,", $i;
                }
                else if($i~/^[0-9]/) {
                        printf "%s,", $i;
                }
        }
} END {
        printf "\n";
}'
2 Likes

Thanks that's really cool.

You might also want to consider using the "-l" option, which switches to "long output".

I hope this helps.

bakunin