vmstatで時刻を表示する

sarコマンドを実行すると、先頭に時刻を表示する。

# sar 1
Linux 3.2.0-4-amd64 (linux) 	20140214日 	_x86_64_	(8 CPU)

201702秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
201703秒     all      0.00      0.00      0.00      0.00      0.00    100.00
201704秒     all      0.00      0.00      0.00      0.00      0.00    100.00

vmstatでは時刻を表示しない。

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 704064 136996  88860    0    0     0     0    4    4  0  0 100  0
 0  0      0 704064 136996  88860    0    0     0     0   57   31  0  0 100  0

vmstatでもsar同様に時刻を表示させたかったので調べていたら、以下のようにすれば良いことが分かった。

# vmstat 1 | awk '{print strftime("%H:%M:%S"), $0; fflush()}'
20:25:32 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
20:25:32  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
20:25:32  1  0      0 703740 136996  88864    0    0     0     0    4    4  0  0 100  0
20:25:33  0  0      0 703864 136996  88864    0    0     0     0   55   31  0  0 100  0

キモはfflushでバッファしないようにしていること。これをしておかないと、ファイルにリダイレクトしている時、ctrl+cで停止してもバッファされている分がファイルに出力されなくなる。開始数秒でctrl+cで停止すると、なぜかファイルサイズが0バイトで偉く悩んだ。