rrdtool+HotSaNIC+mbmonによる PC監視
sorry Japanese only
最終更新日 2004/10/16
page size = Mbyte

2014年、サーバー更新し、サーバー監視も変更しました ==> gnuplotでサーバー監視


rrdtool-1.0.48
hotsanic-0.5.0-pre5
xmbmon204
smartctl 5.32
の組み合わせで、linux pc serverの監視をグラフ化してみよう。

最初は MRTGとか導入してみましたが、どうも苦労した割には取得するデーターの項目などが気に入らない。
と言うことで、rrdtoolというのを使い、安易に HotSaNICというのでセットアップし、簡単に色々なデーターをグラフ化してみました。
現在は、HotSaNICでは取得できない項目を xmbmonと smartctlを使って自分で色々変更し、こんな感じで動作しています。



ちなみに
rrdtoolとは、独自 databaseへデーターをどんどん蓄積していき、データー抽出、グラフ化などを行えるデーターベースソフト。
HotSaNICとは、記録するデーターの抽出方法、rrdtoolの database作成、グラフ化の細かい書式などを全て簡単にセットアップしてくれるお気楽ツール。(rrdtoolを取っつきやすくするためのツール)

どんなデーターを記録するのか。
そのデーターはどんな方法で取得するのか。
取得したデーターをどんな方法で rrdtoolへ渡して記録するか。
グラフ化する時の細かい書式。
これらを全て自分でやる気になれば HotSaNICは必要ありません。

実行させようとしている環境

OS:vine linux 2.6
マザーボード Abit KR7A-133R (KT400 AMDアスロンXP 1700+ CORE1.6Vの CPUを 133MHz*6.0=800MHzの低クロックで 1.15V駆動)
mbmon単独では動作してます。

[root]# mbmon -rc1
TEMP0 : 34.0
TEMP1 : 39.0
TEMP2 :  0.0
FAN0  : 2070
FAN1  :    0
FAN2  :    0
VC0   :  +1.20
VC1   :  +0.05
V33   :  +3.47
V50P  :  +4.92
V12P  : +11.80
V12N  :  +2.94
V50N  :  +0.38

情報が少ない
バージョンによって、今まで書いてくれている人の設定そのままでは動かない。
個人的な(cgi,perlなどの)スキル不足。
が原因なんですが、あれやこれやとやって動いても、順次記録を取って行ってないとどう動かしたかがワカラン。
となってしまいますので HotSaNICのディレクトリー全削除で 1からやり直して順次記録を取っていくことにしました。

HotSaNICのディレクトリー全削除
[root]# cd /usr/local/HotSaNIC
[root}# rm -r -f * .*
実行する時のカレントディレクトリーから下を、何も聞かず、サブフォルダーまで一気に全削除します。
くれぐれも実行する時のディレクトリーに注意して下さい。

rrdtoolと mbmonの installは省略します。

HotSaNICの install

HotSaNICを downloadします。
HotSaNICの installは、ただ解凍するだけで完了です。

[root]# cd /usr/local
[root]# tar xvf hotsanic-0.5.0-pre5.tgz 
HotSaNIC/
HotSaNIC/CVS/
HotSaNIC/CVS/Root
HotSaNIC/CVS/Repository
HotSaNIC/CVS/Entries
HotSaNIC/CVS/Tag

途中省略

HotSaNIC/Documentation/
HotSaNIC/Documentation/CVS/
HotSaNIC/var/CVS/Entries
HotSaNIC/var/CVS/Tag
HotSaNIC/var/.cvsignore
[root]#

何を表示するかセットアップを実行
私は diskio,system,networks,traffic,sensorsを選択しました。
セットアップ画面は長いんでこちら => setup-pl.txt

終了したら、出来上がった settingsを編集します。

77行〜87行にかけて
varディレクトリーの指定を自分の好みに変更
VARDIR="/var/log/HotSaNIC/"
LOGDIR="/var/log/HotSaNIC/"
PIDFILE="/var/run/rrdtimer.pid"

141行
webdirを自分の環境に合わせます。
WEBDIR="/home/localhost/HotSaNIC"

151行
gifと pngどちらにするかを記述する
IMAGEFORMAT="png"

makeindex.plを実行
[root]# makeindex.pl
generating index-files for each plugin...
diskio
  moving index-files to webdir

networks
  moving index-files to webdir

sensors
  moving index-files to webdir

system
  moving index-files to webdir

traffic
  moving index-files to webdir


building /home/localhost/HotSaNIC/index.html ...
table-size: 2 lines.

Modules are added in this order:
traffic
system
sensors
diskio
networks

done.

動作させてみます。

[root]# rrdgraph start
Starting rrdtimer...
reading & checking config (/usr/local/HotSaNIC/settings) ...
evaluating cmdline arguments...
entering daemon mode...

実際に動いているかを確認します。
[root]# ps ax
29400 pts/0    S      0:00 rrdtimer
29442 pts/0    S      0:00 perl ./read-data.pl start diskio
29445 pts/0    S      0:00 perl ./read-data.pl start networks
29448 pts/0    S      0:00 perl ./read-data.pl start sensors
29452 pts/0    S      0:00 perl ./read-data.pl start system
29456 pts/0    S      0:00 perl ./read-data.pl start traffic

数分放置した後、
[root]# convert.pl
Using Image::Magick perl-module
resizing /home/localhost/HotSaNIC/traffic/ppp0-week.png
resizing /home/localhost/HotSaNIC/system/load-week.png
resizing /home/localhost/HotSaNIC/system/proc-week.png
resizing /home/localhost/HotSaNIC/system/cpu-week.png
resizing /home/localhost/HotSaNIC/system/mem-week.png
resizing /home/localhost/HotSaNIC/system/swap-week.png
resizing /home/localhost/HotSaNIC/system/users-week.png
resizing /home/localhost/HotSaNIC/system/irq-week.png
resizing /home/localhost/HotSaNIC/system/uptime-week.png
resizing /home/localhost/HotSaNIC/diskio/hda-week.png

それでは index.htmlを表示させてみましょう。


前途多難を予想させる出来映えです・・

まず簡単な所から、動作している物から設定を煮詰めます。
まずは traffic

trafficをクリックして traffic画面にすると、+/-が逆になっています。
(出力が +だと思います。)

HotSaNIC/modules下に、各項目のディレクトリーがあります。
その中にも settingsがあるので、modules/traffic/settingsを編集します。
[root]# cd modules/traffic
[root]# vi settings

10行目
SWAPIO="yes"

ついでに、転送量の単位も byte/secから bit/secに変更しておきます。
5行目
STYLE="bits"

44行目の description部分も自分の好みに変更します。
DEV="ppp0,12500000,12500000,B-Flets fibre network 100M"

保存したら、HotSaNICディレクトリーへ戻って
[root]# rrdgraph stop

間違ったグラフと記録されたデーターを消去するため、以下のコマンドを実行
[root]# clearall CLEAR_WEBPAGE
This will destroy everything under /home/localhost/HotSaNIC and therefore your web-graphs. Enter  yes  to continue
yes
[root]# clearall CLEAR_DATABASES
This will destroy all sampled data. Enter  yes  to continue
yes
[root]# clearall CLEAR_GRAPHS

もう一度インデックスを作り直します。
[root]# makeindex.pl ; rrdgraph start ; convert.pl

の順で実行します。


時間がたってからもう一度 makeindex.plを実行したら systemも出てきました(w


+/-が逆、byte=>bitになっているのを確認します。


次は diskioです。

ガーっと diskからファイルの読み込みをした所です。
まあ OKでしょう。

曜日の文字化けが気になるので、HotSaNIC/rrdgraphへ以下の行を追加します。
LC_TIME="abday"
export LC_TIME
PERL_BADLANG=0
export PERL_BADLANG
私は 5行目から追加しました。
rrdgraph startを実行した時 errorが出なければ、下の 2行はいらないようです。


次は、全く表示されていない物を片づけていきます。
まずは簡単そうな networksから。

modules/networks内の settingsを見てみます。

12行目
STYLE=bytes とかなっているので以下のように変更
STYLE="bits"

34行目
何も記述が無いので以下の行を追加
DEVEXT="ppp0,B-Flets fibre 100M"
とここまでやった所で気が付きました。
networksって、iptablesを変更するんですね。
trafficと同じような dataしか取れないし、iptablesを変えられるのが嫌なので、networksはやめることにしました。
HotSaNIC/settingsの中に記述されている、networksの部分を削除 (3ヶ所)


では、次は大難解
昔 1回動いてグラフ出力成功したけど、どうやったら成功したかが分からないまま、変更したら出なくなってしまい、そのあと出そうな気配すらない sensorsです。

と言うことで、sensorsは色々闘ってみましたが、出ません。
良く分からない cgiを、改良をして動くようにしよう。ってのが間違ってます。

と言うことで sensorsは、自分で作ってしまいました。

rrdファイルの作成

以下のコマンドで CPU TEMP用の rrdファイルを作成

 rrdtool create rrd/CPU-TEMP.rrd \
 >--step 300 \
 >DS:CPU:GAUGE:600:U:U \
 >RRA:LAST:0.5:1:288000
行末の \ は、1行が長くなるので \ をつけて折り返すの意味です。
\ をつけてリターンすると、次の行に > が出てきて続きのコマンドを入力できます。

それぞれの行の説明をすると、
--step 300 rrdファイルへの記録は 300秒(5分)ごと DS:CPU: CPUという名前を付ける GAUGE: その時の値を記録していくタイプのデーター 600: 600秒以上更新が無いと data unknownに設定 U:U 最小,最大値は決めず(どんな値でも受け付ける) RRA:LAST: 平均値などは求めない? 0.5: 良く分かりません 1: step 300で決めた時間数の何回に 1回記録を取るかの設定 288000 1000日分のを取得できるように 60sec*60min*24hr*1000day/300sec = 288000
(こちらにも rrdtool createした時の説明があります => smartctlページ)

同じように CASE TEMP用の rrdファイルも作成します。

 rrdtool create rrd/CASE-TEMP.rrd \
 >--step 300 \
 >DS:CASE:GAUGE:600:U:U \
 >RRA:LAST:0.5:1:288000

以下のようなファイルが出来上がります。
5分おきに 1000日分の大きさのファイルが createしたときに出来上がります。

[root]# ls -ltr
合計 3296
-rw-r--r--    1 root     root      1682460 Aug  1 17:28 CPU-TEMP.rrd
-rw-r--r--    1 root     root      1682460 Aug  1 17:28 CASE-TEMP.rrd

rrdファイルを後から確認するには、以下のようなコマンドを使います。

[root]# rrdtool info CPU-TEMP.rrd
filename = "CPU-TEMP.rrd"
rrd_version = "0001"
step = 300
last_update = 1091348880
ds[CPU].type = "GAUGE"
ds[CPU].minimal_heartbeat = 300
ds[CPU].min = -5.0000000000e+01
ds[CPU].max = 1.0000000000e+02
ds[CPU].last_ds = "UNKN"
ds[CPU].value = 7.4700000000e+03
ds[CPU].unknown_sec = 0
rra[0].cf = "LAST"
rra[0].rows = 210240
rra[0].pdp_per_row = 1
rra[0].xff = 5.0000000000e-01
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0

期間とか表示させる物とか、rrdファイルを作る時に決めておかなければ駄目なようです。
よく考えて rrdファイルを作りましょう。

必要な data抽出方法の考察

次は、rrdファイルに dataを記録していくスクリプトの作成です。
まずは、どのように値を抽出するかを考えます。
私が欲しいデーターは CPU TEMPと CASE TEMPの 2個だけです。

[root]# mbmon -c 1

Temp.= 37.0, 41.5,  0.0; Rot.= 2070,    0,    0
Vcore = 1.22, 0.05; Volt. = 3.47, 4.92, 11.80,   2.94,  0.38
37.0が CASE TEMP
41.5が CPU TEMPなんですが、これでは、dataを抽出するのが難しそうです。

mbmon -h でヘルプを見た所、良いオプションがありました。

[root]# mbmon -T1 -c 1
37.0
狙った値のみが出てくるではありませんか。
data抽出は、このコマンドで行くことにします。

あと必要なのは、時間の値なのですが、これは HotSaNICで使っている手法を使うことにします。
[root]# perl -e 'print time'
1091349632[root]# 
なんか dataの後ろに改行が入って無くて見苦しくなってますが・・・

shスクリプトの中で使う場合は、以下のように ` でくくる必要があります。
current_time=`perl -e 'print time'`

全体をくくる ` は、shift+@
print timeの両脇をくくる ' は shift+7です。

rrdファイル更新用スクリプト

data更新用 shスクリプトは以下のようになりました。

#!/bin/bash
#
#環境変数セット
#
rrddir="/usr/local/HotSaNIC/modules/sensors/rrd"
rrdbin="/usr/local/rrdtool/bin/rrdtool"
mbmbin="/usr/local/bin/mbmon"

#各種 data取得
#
current_time=`perl -e 'print time'`
case_temp=`/usr/local/bin/mbmon -T1 -c 1`
cpu_temp=`$mbmbin -T2 -c 1`

#rrdファイル更新
#
$rrdbin update $rrddir/CASE-TEMP.rrd $current_time:$case_temp
$rrdbin update $rrddir/CPU-TEMP.rrd $current_time:$cpu_temp
これを sensor-update.shとか名前を付けて modules/sensorsディレクトリーに保存。
chmod 744とかやって実行できるようにしておく。
あとは、この shスクリプトを crontab -eで cronに登録するだけです。

*/4 * * * * /usr/local/HotSaNIC/modules/sensors/sensor-temp-update.sh

5分ごとに更新する予定で rrdファイルを作りましたが、cronで 5分ごとに更新すると、グラフがとぎれとぎれになってしまうので、rrdファイルの更新は 4分おきにするようにしました。

graph出力用 shスクリプト

graphの出力も HotSaNICとは別に、独自に出力するようにします。

何はともあれ、試しに graphを作ってみます。
どうしてもオプションが長くなりがちなので、shスクリプトを作って作業していった方が楽です。

#!/bin/bash
#
rrddir="/usr/local/HotSaNIC/modules/sensors/rrd"
rrdbin="/usr/local/rrdtool/bin/rrdtool"
mbmbin="/usr/local/bin/mbmon"
websensor="/home/localhost/HotSaNIC/sensors"

#graph出力
#
$rrdbin graph $websensor/mbmon-cpu-hour.png \
--imgformat PNG \
-s -3600 \
DEF:CPU=$rrddir/CPU-TEMP.rrd:CPU:LAST \
AREA:CPU#00CF00:"CPU temp C"
こんなファイルを作っておき、実行して PNGのファイルを確認して、変更して、又実行して・・・
ってやっていくと、目的のグラフが出来上がると思います。

rrdファイルの作成、data更新、graph作成、以下のページを参考にさせていただきました。
rrdtoolマニュアル訳
RRDtoolチュートリアル

その後、smartctlによる HDD温度測定も加わり、こちらの内容へ変更しました

29833
戻る