システムステータスを可視化しよう
いざきれいなグラフにしようとすると、めんどくさい。
グラフ描画ツールはいくつもあるものの、スマートできれいに、かっこよくとなるとなかなか・・・。
手っ取り早いのは、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から始まる長めの行。
汚い実装でお恥ずかしいが、モットーは動かないプログラムより動くスクリプト なのでとりあえずご容赦ください。
- vmstatのログをcat
- 区切り文字をスペース1個分に置換
- 最後50行だけに制限
- vmstatの中からCPU部分だけを抜き出し
- 改行をカンマに置換して
- 最後の改行だけは削除
というようなことを、項目ごとにやっています。
もっとスマートな実装方法はいくらでもあるので、参考にしてすてきなスクリプトを書いてください。