CPU 負荷率のグラフ化

cpu.png 24 時間動作しているマシンであれば、そのマシンの状態を知ることは重要です。 会社や学校に行っている間に異常な負荷を示しているといったことのないようにしたいものです。 特に今年の夏は連続猛暑日が多いのですが、そんな中、我が家のように日中はエアコンを入れていない部屋で動作しているサーバーは見守ってあげたいものです。

ここでは sar コマンドの値を awk で加工し、CPU の使用率をグラフにしてみます。

#! /bin/sh

env LC_ALL=C sar | awk '/^[01][0-9]/ {print $1, $3, $4, $5}' > cpu.txt

{

cat <<EOT
set xdata time
set timefmt "%H:%M:%S"
set terminal png
set yrange [0:100]
set xlabel 'Time'
set ylabel 'System Activity (%)'
plot "cpu.txt" using 1:2 title 'User' with lines
replot "cpu.txt" using 1:3 title 'Nice' with lines
set output "cpu.png"
replot "cpu.txt" using 1:4 title 'System' with lines
quit
EOT
} > cpu.gp

gnuplot cpu.gp > /dev/null

rm -f cpu.txt
rm -f cpu.gp

実行すると、実行ディレクトリに cpu.png という PNG ファイルができます。

もっとも上記の例では awk の出番は非常に少ないのですが、gnuplot へ与えるためのデータ加工に使っています。 sar コマンドの結果は 00:00 でリセットされますので、23:59 あたりに cron を使って実行するのも良いですし、毎時に実行してリアルタイムに調べるのも良いと思います。 もっとも sar コマンドで出力されない 00:00 直後には sar の出力がないためや gnuplot で折れ線を引くために必要な 2 点分の情報がないためエラーがでます。

こうした解析ソフトはいくつもありますが、目的が絞られているのであれば、自分で作成した方が軽量で融通の効くものになってくれます。

うちのマシンは比較的アクセス数が少ないため、BOINC を使いグリッドコンピューティングをやっている関係で nice の値が 50 % になっています。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png