今日はGeektoolでCPU使用率を「無理やり」グラフ表現する話.
Geektoolはグラフの表示ができない.CPU使用率をグラフ表現しようとした場合,一般的には2つの方法が考えられる.
今日は,この1,2以外の方法を模索した結果を書く.つまり,
無茶しやがって・・・というAAが飛んできそうだが,gnuplotよりは平易な設定でできると思う.CPU負荷はどうなのかわからない.それと,2の方法よりも画像を出力しない分,HDDへの書き込みは少ないが,この方法でもHDDへの書き込みが頻繁(geektoolで指定した秒数毎)に発生する.これは,その秒毎にCPU使用率をファイルへ保存するためだ.
もっとも,この点は,CPU使用率のログファイルの書き込み先をRAM Diskに移したtmpフォルダなどに指定してやれば,ほぼクリアだろう.各人の環境によるということだ.
cpulog.sh
このシェルスクリプトでやっていることは,呼び出されるたびにtopコマンドでcpu使用率を取得して,最新の300件を保存,その後にphpスクリプトの呼び出しである.この300を好きな数字に変更すれば,ログはいくらでも取れる.
graph.php
続いて,Geektoolの設定だが,shellのコマンドで,
それから,フォント指定をする.もちろん,フォント種は等幅フォントであればなんでもかまわない.重要なのはフォントサイズだ.Geektoolでは,最小9までしかフォントサイズリストに表示されないが,それよりも小さいサイズも指定できる.直接数字を入力すればいい.2以上がよろしいのではないかと.
こうして,できたのが,↓
いうまでもないが,利用する際は自己責任で.
Geektoolはグラフの表示ができない.CPU使用率をグラフ表現しようとした場合,一般的には2つの方法が考えられる.
1.Geektoolでの表示はあきらめて,ほかのユーティリティを使う.例えばXRGとか.1については,ググればいくらでも出てくるので,面白くない.ということで,なんとかGeektoolで表示できないものかと考えた.2については,gnuplotというグラフ描画ユーティリティを使った方法を試した.ただし,この方法については,gnuplotのインストールとコマンドの習得,画像作成時のCPUとHDDへの負荷が若干気になるところだ.とはいえ,面白い結果が得られた(とりあえずうまいこと動いた)ので,後日改めて書き残そうと思う.
2.ほかのユーティリティで画像を保存して,Geektoolのimageで表示する.
今日は,この1,2以外の方法を模索した結果を書く.つまり,
3.テキストでグラフを描くである.いつものように,こことここにスクリプトを置いておく.基本的には,シェルスクリプトと,私の一番得意な言語PHPでできている.
無茶しやがって・・・というAAが飛んできそうだが,gnuplotよりは平易な設定でできると思う.CPU負荷はどうなのかわからない.それと,2の方法よりも画像を出力しない分,HDDへの書き込みは少ないが,この方法でもHDDへの書き込みが頻繁(geektoolで指定した秒数毎)に発生する.これは,その秒毎にCPU使用率をファイルへ保存するためだ.
もっとも,この点は,CPU使用率のログファイルの書き込み先をRAM Diskに移したtmpフォルダなどに指定してやれば,ほぼクリアだろう.各人の環境によるということだ.
cpulog.sh
#!/usr/bin/sh赤字のところは,例の如く,それぞれの環境に合わせて書き換える必要がある.
if [ "`wc -l /tmp/cpu.log | awk '{print $1}'`" -gt 300 ]; then
cat /tmp/cpu.log | tail -300 > /tmp/cpu.log.swp
mv /tmp/cpu.log.swp /tmp/cpu.log
fi
top -R -F -u -l2 | head -4 | tail -1 | sed -E -e "s/CPU usage: (.*)% user.*/\1/" >> /tmp/cpu.log
#php ascii graph
php /PATH/graph.php /tmp/cpu.log
このシェルスクリプトでやっていることは,呼び出されるたびにtopコマンドでcpu使用率を取得して,最新の300件を保存,その後にphpスクリプトの呼び出しである.この300を好きな数字に変更すれば,ログはいくらでも取れる.
graph.php
#!/usr/bin/phpTicsは,グラフのメモリを指定している.arrayが表示する目盛りになる.
<?php
$str = "";
function Tics($i){
$tics=array(0,20,40,60,80,100);
if(in_array($i,$tics)){
$str ="-";
}else{
$str =" ";
}
return $str;
}
if($argv[1] && @file_exists($argv[1])){引数で指定したファイルを開いて,配列変数$fに格納
$f = file($argv[1]);
for($i=100;$i>0;$i--){
$str.=Tics($i);
for($j=0;$j<count($f);$j++){
if($f[$j]>$i){
$str.="#";
}else{
$str.=" ";
}
}
$str.=Tics($i);
$str.="\n";
}
}else{
$str ="target was not found\n";
}
echo $str;
?>これで,グラフが描ける.
続いて,Geektoolの設定だが,shellのコマンドで,
sh /PATH/cpulog.shを指定する.PATHは例の如く,環境に従うべし.refreshを適当な秒数に設定するのを忘れないように.ちなみに,私の環境では1秒になっている.
それから,フォント指定をする.もちろん,フォント種は等幅フォントであればなんでもかまわない.重要なのはフォントサイズだ.Geektoolでは,最小9までしかフォントサイズリストに表示されないが,それよりも小さいサイズも指定できる.直接数字を入力すればいい.2以上がよろしいのではないかと.
こうして,できたのが,↓
いうまでもないが,利用する際は自己責任で.
0 件のコメント:
コメントを投稿