• このエントリーをはてなブックマークに追加

【linux豆知識】awkの便利な使い方:vmstatに時刻を付ける

  • このエントリーをはてなブックマークに追加

awk
その他のawkの便利な使い方は
【linux豆知識】awkの便利な使い方:grep的に使う
【linux豆知識】awkの便利な使い方:ファイルの先頭と末尾の不要な行を表示しない
をご覧ください。

zaco muraです。
linuxサーバの負荷検証や長時間試験などでリソース(CPU/メモリなど)の変動を確認したい、というのはよくある要望だと思います。
最近(でもないか?)ではsar(sysstat)を使えば便利にリソースを取得してくれますが、古いサーバとかでは入っていないこともあるかと思います。
そんな時、私はvmstatを使っています。しかしこいつにはちょっと困った問題が。。

困ったこと

vmstatには、時刻情報が付加されていません。

server $ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0     72 691484 202240 798488    0    0     1    10    3    2  0  0 99  1  0
 0  0     72 691484 202240 798488    0    0     0     0 1004   50  0  0 100  0  0
 0  0     72 691484 202240 798488    0    0     0     0  984   41  0  0 100  0  0

(私の場合)検証を行う場合にはたいてい他のイベント(検証対象のプログラム等)のログと照らし合わせてリソース推移を見たいので、そのログの時刻と突合するためにはやっぱりログがあったほうが良いんです。

対策

ということで、この課題もawkで解決できます。
以下のようにすれば、vmstatの実行結果に時刻を付加できます。

server $ vmstat 1 | awk '{print strftime("%Y%m%d-%H:%M:%S")" "$0}'
20150604-12:49:11 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
20150604-12:49:11  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
20150604-12:49:11  1  0     72 691476 202240 798500    0    0     1    10    3    2  0  0 99  1  0
20150604-12:49:12  0  0     72 691476 202240 798500    0    0     0     0 1005   55  0  0 100  0  0

どうでしょうか。これでログの時間と合わせて確認することができますね。

まとめ

この例では時刻ですが、応用すればcatやtailと組み合わせて特定の行にだけ文字列を付加するなど、いろいろと使えそうです。
awkは便利ですね~

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link