システムステータスを可視化しよう

いざきれいなグラフにしようとすると、めんどくさい。

グラフ描画ツールはいくつもあるものの、スマートできれいに、かっこよくとなるとなかなか・・・。



手っ取り早いのは、Google Chart APIだと思う。

下記は、その実行例。

実は、上記のPNGは画像とそして生成、手動アップロードされた物ではありません。
HMTLソースをご覧いただければ、すぐに分かると思います。
Google Chart APIに対して、サイズ、値、色などのパラメータを渡して、生成されたPNGをimgタグで読み込んでいるわけです。

要は、img タグから始まって、閉じるまでの間を生成してやれば、後は勝手にPNGにグラフが書かれて帰ってくるよ、という物です。

簡単なコードを書いてみました。
linuxのシステムステータスでおなじみの、vmstatからグラフを生成します。
今回はvmstatをグラフにして可視化していますが、freeコマンドでも、iostatでもフィールドだけ調節すれば基本的に何でもいけるはずですね。
あとは、簡易的なWEBアクセス確認ツールとか・・・。

#!/bin/bash
LANG=C
vmstatlogpath='/home/earth/script/googlechart/vmstat.log'

echo '<img src="http://chart.apis.google.com/chart?'
echo '&chs=600x500'
echo -n '&chd=t:'

cat $vmstatlogpath |sed -e 's/ \+/ /g'|tail -n 50 |cut -d" " -f14|tr '\n' ',' |sed 's/,$//g'
echo -n '|'
cat $vmstatlogpath |sed -e 's/ \+/ /g'|tail -n 50 |cut -d" " -f15|tr '\n' ',' |sed 's/,$//g'
echo -n '|'
cat $vmstatlogpath |sed -e 's/ \+/ /g'|tail -n 50 |cut -d" " -f16|tr '\n' ',' |sed 's/,$//g'
echo -n '|'
cat $vmstatlogpath |sed -e 's/ \+/ /g'|tail -n 50 |cut -d" " -f17|tr '\n' ',' |sed 's/,$//g'

echo ''
echo '&cht=lc'
echo '&chds=0,100&chxt=y'
echo '&chco=ff0000,0000ff,00ff00,ffff00'
echo '&chdl=CPUuse|CPUsys|CPUid|CPUio">'

# c earthlab 


vmstatlogpath='/home/earth/script/googlechart/vmstat.log' で定義しているのは、vmstatをリダイレクト出力させたログファイルです。
ただ、vmstatの標準オプションのままでは、ヘッダーが邪魔になるので

#!/bin/bash
LANG=C
vmstatlogpath='/home/earth/script/googlechart/vmstat.log'
vmstat -n 5 100 |grep -v -e "^procs" -e " r  b"> $vmstatlogpath &

とでもして、ヘッダーを適当に除外してください。
echoしている行は、APIに渡すオプションを吐かせています。
色だったり、サイズだったり。
肝心なのは、catから始まる長めの行。

汚い実装でお恥ずかしいが、モットーは動かないプログラムより動くスクリプト なのでとりあえずご容赦ください。

  1. vmstatのログをcat
  2. 区切り文字をスペース1個分に置換
  3. 最後50行だけに制限
  4. vmstatの中からCPU部分だけを抜き出し
  5. 改行をカンマに置換して
  6. 最後の改行だけは削除

というようなことを、項目ごとにやっています。
もっとスマートな実装方法はいくらでもあるので、参考にしてすてきなスクリプトを書いてください。