tool/HotSaNIC
HotSaNICとは †
HotSaNICは、サーバの稼働情報を蓄積してグラフ化するためのツールである。同じ様なものに、MRTGなどがあるが、一番の違いはSNMP agentが必要ないことだ(あればあったで情報を参照できる)。また、データの蓄積はrrdtoolにて行うようになっている。実は、rrdtoolを使おうと思って導入した。
_ 使用例(クリックで拡大:1280x600〜)
- 目次
取得できる情報 †
取得できる情報は以下の通り。
| apcusv | APC製UPS管理モジュールの情報 |
| apps | 指定したプロセスの監視(プロセス数) |
| bind | bindの監視 |
| diskio | HDDのRead/Write監視 |
| dnet | プロキシ(だと思う)の監視 |
| mailq | メールサーバの監視 |
| netstat | TCP connectionの状況 |
| networks | ネットワーク毎の帯域の監視(だと思う) |
| ntp | ntpの監視 |
| part | パーティション容量の監視 |
| ping | pingによる応答時間のモニタ |
| sensors | lm-sensorsで取得できる温度・ファン回転数等の監視 |
| shoutcast | ストリーミングの監視 |
| system | process, CPU load, memory, swap, user, irq, uptimeの監視 |
| traffic | ネットワークデバイス毎の転送量の監視 |
| worms | ワーム(Code Red等)の監視 |
導入 †
Debianにも、Gentooにも、パッケージがない。なので、Tar ballを持ってきて展開する必要がある。が、実際はスクリプトにより大体の設定を行ってくれる。「大体」というのは、全ての設定をスクリプトで行える訳ではないのと、私の環境では、スクリプト実行の際にエラーがでてしまった為。また、暫く前からアップデートされていないようで、Kernel-2.6の機能を使うには(最近のlm-sensorsから得られる情報などを使うためには)、CVSから一番新しいソースを持ってくる必要がある。
_ Install
まず、Tar ballのソースを持ってくる。最新リリースは、0.5.0-pre5なのだが、開発版のSnap Shotの方が新しいので問題がなければこちらの方がいいかもしれない。
とりあえず、tar ballを適当なディレクトリへ展開する。
% tar zxf hotsanic-0.5.0-pre6-snapshot.tgz
また、lm-sensorsを使うために、CVSから最新のものを持ってくる。これを、展開したディレクトリのmodules/sensors/setup.plと入れ換え、実行権を与えておく(chmod +x )。
設定 †
_ スクリプトの実行
setup.plを実行する。
% ./setup.pl
プログラムはmodule毎に分かれていて、スクリプトを実行すると、各moduleを有効にするかどうかと、有効にしたmodule毎の設定を聞いてくる。
ただ、スクリプトの出来が悪く、ちょっと手直しをしないと動かなかったりするのが多い。Gentoo Linuxでの例をこちらに挙げておく。
_ config
コンフィグは、settingsというファイルに書き込まれる。全体のコンフィグ./settingsと、各モジュール毎のコンフィグ./modules/*/settingsとからなる。
settings(全体の設定) †
大体の部分はsetup.plが埋めてくれるはず。
DAEMONDIR="/usr/local/HotSaNIC" BINPATH="/usr/bin" VARDIR="$DAEMONDIR/var/" LOGDIR="$DAEMONDIR/var/log/" PIDFILE="$DAEMONDIR/var/run/rrdtimer.pid" WEBDIR="/var/www/localhost/htdocs/hotsanic" DIAGRAMLOG="last" LOGSIZE="200000" LOGBACKUPS="5" DEBUGLEVEL="0" TIMESTAMPING="2" STIME="120" SCHEDULE_MIN="100" SCHEDULE_MAX="200" RUN="apps bind diskio mailq netstat networks part ping sensors system traffic worms" AUTOINDEX="no" WEB_BACKGROUND="bg.gif" WEB_MENUBACKGROUND="menubg.gif" WEB_BGCOLOR="E0E0E0" WEB_TEXT="000000" WEB_LINK="000080" WEB_VLINK="800080" WEB_ALINK="008000" WIDTH="600" HEIGHT="200" IMAGEFORMAT="png" SHOW="apps bind diskio mailq netstat networks part ping sensors system traffic worms" ORDER="traffic system part ping dnet sensors" DTIME="15" CTIME="24" CONVERTMETHOD="ImgMgck" CONVERTPATH="/usr/bin" THUMBSIZE="20%" REFRESH="300" SNMPWALK="not configured" SNMPGET="not configured" SNMPBULKWALK="not configured"
setup.plの後で、BINPATH,WEBDIR,IMAGEFORMAT,CONVERTMETHOD,CONVERTPATHを修正してやれば良い。
BINPATH="/usr/bin"
rrdtoolのパス。
WEBDIR="/var/www/localhost/htdocs/status"
コンテンツを置くディレクトリ
IMAGEFORMAT="png"
出力するグラフのフォーマット。
CONVERTMETHOD="ImgMgck"
グラフのサムネイルを出力するための方法を選択。ImgMgck imagemagickのconvertか、I::M perl moduleのImage::Magickなどを選択する。
CONVERTPATH="/usr/bin"
imagemagickのconvertを使う場合のパスを記述。
_ 各module毎の設定
apcusv †
APC製UPS管理モジュールを使って情報を得るらしいのだが、APCのUPSを使ってないので全く不明。
apps †
指定したアプリケーションのプロセス数を監視するためのモジュール。setup.pl実行時に選択すると、現在動 いているものの内でどのプロセスを監視するかを指定できる。
APP="php-cgi,php-cgi prosess" APP="プロセス名,説明"
の様に指定する。
bind †
bindに関する統計をとるためのモジュール。これを利用するためには、bindの設定(named.confで、統計を利用できるよう、
statistics-file "/var/bind/named.stats";
の指定をする必要がある。ファイル名は適当に。また、この統計の生成間隔が0になっている場合
statistics-interval 0;
は、これをコメントアウトすると、defaultの60が適用される。
その上で、rndcのパスと、statistics-fileのパスを記述する。
BINDPATH=/usr/sbin/rndc BINDSTAT=/var/bind/named.stats
diskio †
HDD等へのread/writeアクセスを記録する。HotSaNIC全体的にそうだが、kernel-2.6への対応が甘いのか、readとwriteが逆になっているような。
KERNEL="2.6" SOURCE="diskstats" DEV=3_0,hda DEV=22_64,hdd
SOURCEは、kernelのバージョンによって設定が異なる。DEVに記述するのは、デバイス 番号と表示名となる。デバイス番号は、各デバイスを見れば良い。
% ls -l /dev/hd? brw-r--r-- 1 root disk 3, 0 3月 28 2006 /dev/hda brw-r--r-- 1 root disk 22, 64 3月 28 2006 /dev/hdd
dnet †
プロキシの監視を行うらしい。使ってないので不明。
mailq †
メールサーバのキューの容量、リクエスト数を表示。コンフィグ パラメータはない。
netstat †
TCP connectionの状況を監視する。コンフィグ パラメータはない。
networks †
ネットワーク毎の帯域の監視をするのだと思うが、iptablesを使って情報を得るらしいので、その設定がいるらしい。しかし、ドキュメントもないようなので、全く不明。
ntp †
ntpサーバの監視をする。使ってないので不明。
part †
各パーティションの使用状況を監視する。
DRIVE="/dev/hda7,root filesystem" DRIVE="device,表示名"
とする。NFSマウントしているものも、表示可能。
DRIVE="192.168.5.5:/home/foo,/home/foo"
ping †
指定したホストへのpingの応答時間を監視する。
INTERVAL="60" TYPE="classic" GRAPH_STYLE="lin" GRAPH_MAX="1" PARALLEL="4" METHOD="ping" HOST=192.168.5.5,WEB SERVER,ping
METHODでは、各種ping方法を指定できる。pingとするとコマンドのpingを指定するので、これを指定すれば間 違いなく動く。HOSTには、
HOST=サーバ名,表示名,ping方法
を記述する。
sensors †
lm-sensors等の情報を監視する。コマンドのリダイレクトも可能なので、hddtempやmbmon等も利用可能。
SENSOR=/sys/bus/i2c/devices/0-002d/temp4_input,temp,CPU temp,1,0.001,0,C,20,70 SENSOR="/usr/sbin/hddtemp -n /dev/hda |",hda,HDD1,1,1,0,C SENSOR="/usr/sbin/hddtemp -n /dev/hdd |",hdd,HDD2,1,1,0,C
記述は、
SENSOR=デバイスパス,DBへの名前,表示名,1,倍数,0,表示する単位[,最小値,最大値]
となる。
shoutcast †
ストリーミングを監視するらしい。使ってないので不明。
system †
cpu,load,proc,mem,swap,users,irq,uptimeを監視する。Gentoo Linuxでは、なぜかirqが表示されなかった。
NUMCPU="1" GRAPH_BASE.CPU="absolute" CPU_SHOW_MAX="0" SECTIONS="cpu load proc mem swap users irq uptime" IRQ="0,timer" IRQ="1,kbd" IRQ="2,casc" IRQ="3,ser1" IRQ="4,ser2" IRQ="5,?" IRQ="6,fdd" IRQ="7,lpt" IRQ="8,rtc" IRQ="9,acpi" IRQ="10,?" IRQ="11,?" IRQ="12,?" IRQ="13,CoPro" IRQ="14,ide0" IRQ="15,ide1"
記述の詳細は、以下の通り。
NUMCPU="1"
CPU数を指定する。
GRAPH_BASE.CPU="absolute"
CPU使用率の表示方法を指定する。percent,absolute,noneを指定可能。
CPU_SHOW_MAX="yes"
yesを指定すると、weekly,monthly,yearlyにCPU使用率の最大値も合わせて表示する。
SECTIONS="cpu load proc mem swap users irq uptime"
指定したもののみ表示する。
IRQ="0,timer"
IRQの番号と、対応するものの名前を指定する。IRQ番号と名前は、/proc/interruptsを参照。そこにないもの は不明。
traffic †
ネットワークデバイス毎の転送量を監視する。
GRAPH_BASE="bytes" SWAPIO="0" GRAPH_MIN="-1000" GRAPH_MAX="1000" GRAPH_RIGID="0" DEV="eth0,12500000,12500000,100 MBit ethernet"
記述の詳細は以下の通り。
GRAPH_BASE="bytes"
グラフの縦軸をbytesまたはbitsにする。
SWAPIO="0"
1を指定すると、グラフを逆転する。
GRAPH_MIN="-1000" GRAPH_MAX="100"
最大値、最小値を指定。
GRAPH_RIGID="yes"
yesを指定すると、値がGRAPH_MIN/MAXを越えた場合でも、越えた範囲を表示せず、GRAPH_MIN/MAXの範囲のみを表示する。
DEV="eth0,12500000,12500000,100 MBit ethernet"
DEV="デバイス名,input max(bytes/s),output max(bytes/s),表示名"
worms †
指定したワーム(Code Red等)を監視する。
LOGPATH="/var/log/lighttpd" LOGNAME="worm.log" INTERVAL="600" ITEM="default.ida,CodeRed" ITEM="cmd.exe,Nimda" ITEM="root.exe,Nimda"
_ 文字化け対策
作成されるグラフだが、そのままだと曜日が文字化けする。これを防ぐには、以下をrrdgraphに追加すればい いようだ。
--- /usr/local/HotSaNIC/rrdgraph 2006-03-23 22:47:25.000000000 +0900 +++ /etc/init.d/rrdgraph 2006-03-28 19:25:25.000000000 +0900 @@ -9,6 +9,12 @@ # Description: HotSaNIC system statistics ### END INIT INFO +PERL_BADLANG=0 +export PERL_BADLANG + +LC_TIME="abday" +export LC_TIME + cd "/usr/local/HotSaNIC" . ./settings
実行 †
# ./makeindex.pl # ./rrdgraph start
でOK。デバイスファイル等にアクセスするので、rootでないとうまく情報が得られないものがあると思う。エラーは、./var/log以下のファイルに記録されるので確認した方がいいだろう。
暫く経つと、WEBDIRで指定したところにグラフの画像が作成される。トップページのサムネイルは、一日に一 度しか作成されないので、必要なら
# ./convert.pl
により作成する。
問題なく動作することを確認したら、システムブート後に自動的に起動されるよう、Gentoo Linux以外は、
# cp rrdgraph /etc/init.d
としてコピーする。更に、Debianなら、
# update-rc.d rrdgraph default
Redhat系なら、
# chkconfig --add rrdgraph
とする。Gentoo Linuxでは、スクリプトがちょっと凝っているのか、上記の方法だと起動時のスクリプト チェックに引っかかる(?)ようなので、/etc/conf.d/local.startに、
/some/where/HotSaNIC/rrdgraph start
を加える。
最後に †
利用するモジュールの数だけperlが起動されるので、settingsのRUNを変更して、不要 なものは使わないようにした方がよい。




グラフが切れているのは、連続稼働していないため