gnuplotプロット例 : topコマンドの結果を取得してシステムモニターとしてプロット
gnuplotでシステムモニターを作る
今回はgnuplotのlabels(ラベル)プロットを利用して、グラフ表示型式のシステムモニターを作ってみました。実用的に使えるかというと微妙でしかなくネタ的要素くらいなものですが、まぁモノは試しということで。
完成したもの
イメージしやすいよう、始めに完成したものを以下にGIFアニメとして載せておきます。gnuplotで作ったグラフ状システムモニター |
CPU負荷が高い順にプロセス名が並ぶ形で、Y軸の高さがCPU負荷を表しています。ここでは負荷が分かりやすいようyesコマンドを走らせています。なので、yesコマンドとそれを実行しているコマンドライン端末guakeの負荷が高くなっています。
また1秒につき1回CPU負荷データを取得してグラフを更新するようにしています。
ソースコード
bind all "d" "break"
set title "Press d key to stop the script"
unset key
set xrange [-1:]
set yrange [0:200]
while (1){
system "top -b -n 1 | head -n 17 | tail -n +7 > data01.dat"
plot "data01.dat" using 0:9 with impulse lw 2 lc "black",\
"" using 0:9:12 with labels left rotate by 45 boxed offset 0,0.5 font ",10"
pause 1
}
解説
topコマンドからシステム負荷を取得
元データとして、topコマンドからシステム負荷(CPU使用率)を取得したものを用います。topコマンドをバッチモード(-bオプション)でテキスト出力出来るようにして、1回だけ処理(-nオプション)をするようにします。またこのままでは先頭行にプロットには不要な行があるので、headコマンドとtailコマンドと合わせて必要な部分だけ抜き出します。
なおここではPiped-dataではなく、gnuplotのsystemコマンドでtopコマンドを走らせて、取得したデータを"data01.dat"というファイルに出力しそれをプロットするようにしました。プロットがlabelsプロットだけならPiped-dataでいいのですが、高さを棒で示すためにimpulseプロットも同時にプロットするため、このように一旦ファイルに出力しています。
(Piped-dataについて : gnuplotで他のコマンドからの出力結果をプロットする方法(Piped-data))
無限ループの終了
グラフはwhileコマンドで無限ループするよう作っています。そして、そのループを終了させるためにbindコマンドでdキーにbreakコマンドを割り当てています。グラフ上でdキーを押せばループは終了します。gnuplot関連のブログ記事
コメント
コメントを投稿