iostat の各行に時刻を入れる

iostat はこんな感じになっていて、

Thu Nov  11 00:01:01 2012
    r/s    w/s   Mr/s   Mw/s wait actv wsvc_t asvc_t  %w  %b device
    0.0    6.0    0.0    0.0  0.0  0.1    0.0   13.7   0   5 ......
    0.0   12.0    0.0    0.1  0.0  0.2    0.0   11.2   0   9 ......
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 ......
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 ......

サービスタイム(asvc_t)でソートしてストレージで1回のI/Oリクエストのレスポンスが遅い時間帯を見たいときとか、時刻がわからなくなって見ずらかったりする。

そんな時は

$ perl -i.org -nle '/^(\w.+)$/ and $d=$1;print qq/$d\t$_/' iostat.log

と、各行に時刻を入れると、

Thu Nov  11 00:01:01 2012	    r/s    w/s   Mr/s   Mw/s wait actv wsvc_t asvc_t  %w  %b device
Thu Nov  11 00:01:01 2012	    0.0    6.0    0.0    0.0  0.0  0.1    0.0   13.7   0   5 ......
Thu Nov  11 00:01:01 2012	    0.0   12.0    0.0    0.1  0.0  0.2    0.0   11.2   0   9 ......
Thu Nov  11 00:01:01 2012	    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 ......
Thu Nov  11 00:01:01 2012	    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 ......
Thu Nov  11 00:01:01 2012	    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 ......

こんな風になるので、

$ sort -k 13 -nr  iostat.log
Thu Nov  11 19:17:31 2012	    0.0    1.0    0.0    0.0  0.0  1.0    0.0 1003.7   0 100 
Thu Nov  11 19:41:32 2012	    1.0    0.0    0.0    0.0  0.0  0.9    0.0  937.4   0  94 
Thu Nov  11 19:37:32 2012	    1.0    0.0    0.0    0.0  0.0  0.9    0.0  926.5   0  92 
...

sort したりしても見やくなる。


最初から各行に時刻が入るようにしておけばよいという話もありますが、既に取得しているデータを分析する場合などそうもいかないので。