RRDTOOL と HotSaNIC でサーバを監視
RRDTOOL と HotSaNIC をVine Linuxにインストールした。サーバの状態をグラフ化するソフトだ。
今までは、MRTGを使って、同じ事をしていたのだが、サーバの温度を監視するようになってから、MRTGに不満を感じ始めていた。
MRTGは、データが古くなればなるほど、データを平均化して丸めてしまう。だいたいの傾向を知るには、これでよい事も多いのだが、ピークを監視したい用途には不向き。
そういうわけで、ついにうちでもRRDTOOLの出番が来たというわけ。
RRDTOOL日本語化から、RRDTOOLをダウンロード。
# rpm --rebuild rrdtool-1.0.40-1.7.3j.src.rpm
出来たrpmを #rpm -ivh でインストール。
本家のソースから入れたときは、/usr/local/rrdtoolが出来たのだけど、こいつだと/usr/bin内にできるようだ。
続いてRRDTOOL用のフロントエンド、HotSaNICのインストール。
これを書いている時点で安定版は、0.4。0.5も出てから1年以上経っているみたいだし、安定してるかなぁと期待して実行してみたら、いろいろ手直ししないと動かないわ、それでもいろいろエラーがログに残るわで断念。素直に安定版の0.4で我慢することにする。
# tar zxf HotSaNIC-0.4.0.tgz で展開したあと、/usr/local/HotSaNIC に置く。
./setup.plを実行。とりあえず、すべてyで。
出来たsettingsファイルの「not configured」になっているところを適当に埋める。
# ./makeindex.pl
# ./rrdtimer -i
# ./rrdgraph start
で実行完了。あとは放置しておくと、グラフが出来上がる。のだが、これが思いのほか時間がかかる。10分以上待った。
グラフのトップページの画像が自動生成されていない場合は、
# ./convert.pl
の実行で作成される。
あとは、うまくデータが取れていない項目の再設定。data-* ディレクトリに降りていって、それぞれのsettingsと格闘。
# ./makeindex.pl
# ./rrdtimer -i
を再実行
# ./rrdgraph restart
で反映。
起動時にrrdgraph が起動されるように、/etc/rc.d/init.d/に rrdgraph をコピー。
# chkconfig rrdgraph on
で起動時に立ち上がるようにする。
さて、ここまでで大体つまづかずに来たのだが、SNMPのデータが取れないことに気づく。
今まで、MRTGで BEFSR41C-JP のデータ転送量をグラフにしていたので、SNMPが使えないのは困る。おまけにBEFSR41C-JPのデータ転送量は、ifInOctets.2&ifInOctets.1で呼ばないといけないので、HotSaNICの設定ファイルに記述するのは無理そうだ。
HotSaNICのperlで書かれているソースを眺めながら考えていたのだが、一旦断念。RRDTOOLを直接呼んで、グラフを書くことにしてみた。
ありがたいことに、Rrdtool-Tutorial-jpというチュートリアルの日本語訳がある。感謝しつつ読んだら、基本的なグラフ描きは案外簡単らしかった。
というわけで、出来たグラフがこれ。MRTG風にしてみた。

しかし、自分でグラフを描いてみて、ますますHotSaNICの偉大さを知る。凝ったことをしようとするとめっちゃめんどい。やっぱりなんとかHotSaNICでやれないかな。
HotSaNIC は、データをためる部分とグラフを描く部分がある。データをためる部分を自分で書いて、グラフを描く部分だけ、HotSaNICにやらせることにした。
HotSaNIC/data-traffic/settings には、BEFSR41C-JP用のSNMPの設定をしたままにしておく。
うちの場合は、こんな感じ。
DEV="SNMP:BEFSR41C-JP:2:public,12500000,12500000,100 MBit ethernet via SNMP (bulk)"
・HotSaNICのtraffic用データベースと同じモノをBEFSR41C-JP用に作成。作成場所は、/usr/local/HotSaNIC/data-traffic/rrd/
rrdtool create BEFSR41C-JP_2.rrd --step 10 \
DS:in:COUNTER:300:0:12500000 \
DS:out:COUNTER:300:0:12500000 \
RRA:AVERAGE:0:1:720 \
RRA:AVERAGE:0.3:6:2880 \
RRA:AVERAGE:0.3:60:2016 \
RRA:AVERAGE:0.3:360:1488 \
RRA:AVERAGE:0.3:4320:1460 \
RRA:MIN:0.3:6:2880 \
RRA:MIN:0.3:60:2016 \
RRA:MIN:0.3:360:1488 \
RRA:MIN:0.3:4320:1460 \
RRA:MAX:0.3:6:2880 \
RRA:MAX:0.3:60:2016 \
RRA:MAX:0.3:360:1488 \
RRA:MAX:0.3:4320:1460
rrdtool の データベースをアップデートするプログラム。
#!/usr/bin/perl
$SNMPCOMMAND="/usr/bin/snmpget";
$SNMPTARGET="192.168.1.1";
$SNMPCOMMUNITY="public";
$OID1="ifInOctets.2";
$OID2="ifInOctets.1";
$data = time();
$data .= ":";
open(SNMP, "$SNMPCOMMAND $SNMPTARGET $SNMPCOMMUNITY $OID1 |");
while (<SNMP>) {
if (/: ([0-9]+)/){
$data .= $1
}
}
close(SNMP);
$data .= ":";
open(SNMP, "$SNMPCOMMAND $SNMPTARGET $SNMPCOMMUNITY $OID2 |");
while (<SNMP>) {
if (/: ([0-9]+)/){
$data .= $1
}
}
close(SNMP);
$data .= "\n";
system("/usr/bin/rrdtool update /usr/local/HotSaNIC/data-traffic/rrd/BEFSR41C-JP_2.rrd $data");
途中でめんどくさくなってエエ加減に書いてます。万が一これを参考にする場合は、適時書き換えてください。ってそれができる人は、もう自分で書けると思います。
こいつをcron で毎分実行にした。
#crontab -e
で
*/1 * * * * /usr/local/bin/BEFSR41C-JP.pl
HotSaNIC/data-traffic/read-data.pl を書き換えて、SNMPが指定されててもSNMPのアクセスをしないようにする。
具体的には、settings ファイル内で定義されている SNMPのある行を処理するループを、next;で抜けてやるだけ。
($dev,$maxin,$maxout)=split(/,/,$values);
if ( index($dev,"SNMP:") >= 0) {
next;
# (undef,$host,$interface,$community,$method)=split /:/,$dev;
# if (defined $method) { if ($method eq "walk") { $SNMPWALK{$host}=1 }; }
# ($dev=$host."_".$interface) =~ s/\./_/g;
# if (defined $snmpinterfaces{$host.":".$community}) {
# $snmpinterfaces{$host.":".$community}=$snmpinterfaces{$host.":".$commun
ity}." ".$interface;
# }
# else { $snmpinterfaces{$host.":".$community}=$interface; }
}
あとは、HotSaNICが作るトップページをお好みにカスタマイズしたら、こんな感じになりました。
http://hidekichi.net/stat.html
MRTGはもう止めてもよさそうだな。
