gnuplotプロット例 : topコマンドの結果を取得してシステムモニターとしてプロット

gnuplotでシステムモニターを作る


今回はgnuplotのlabels(ラベル)プロットを利用して、グラフ表示型式のシステムモニターを作ってみました。実用的に使えるかというと微妙でしかなくネタ的要素くらいなものですが、まぁモノは試しということで。

完成したもの

イメージしやすいよう、始めに完成したものを以下にGIFアニメとして載せておきます。

gnuplotで作ったグラフ状システムモニター
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関連のブログ記事

コメント

スポンサーリンク


このブログの人気の投稿

Ubuntu Softwareが起動しないのでいろいろと調べてみる(Ubuntu 20.04.1 LTS)

gnuplotでプロットなどの色をcolornameの指定で変更する

gnuplot : グラフにグリッド線を描く方法(set grid)

gnuplot : プロット画像のサイズ指定について(set sizeとの違い)

Pythonのformat()を使って1桁の16進数でも2桁で出力する方法