Linux Tips


tool/HotSaNIC

HotSaNICとは

HotSaNICは、サーバの稼働情報を蓄積してグラフ化するためのツールである。同じ様なものに、MRTGなどがあるが、一番の違いはSNMP agentが必要ないことだ(あればあったで情報を参照できる)。また、データの蓄積はrrdtoolにて行うようになっている。実は、rrdtoolを使おうと思って導入した。

_ 使用例(クリックで拡大:1280x600〜)

http://linux.mini13i.gotdns.org/image/hotsanic-global.png*1 http://linux.mini13i.gotdns.org/image/hotsanic-global2.png http://linux.mini13i.gotdns.org/image/hotsanic-system.png

取得できる情報

取得できる情報は以下の通り。

apcusvAPC製UPS管理モジュールの情報
apps指定したプロセスの監視(プロセス数)
bindbindの監視
diskioHDDのRead/Write監視
dnetプロキシ(だと思う)の監視
mailqメールサーバの監視
netstatTCP connectionの状況
networksネットワーク毎の帯域の監視(だと思う)
ntpntpの監視
partパーティション容量の監視
pingpingによる応答時間のモニタ
sensorslm-sensorsで取得できる温度・ファン回転数等の監視
shoutcastストリーミングの監視
systemprocess, 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を変更して、不要 なものは使わないようにした方がよい。

参考

:Server :tool

 


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


 
Link: tool(760d)
Last-modified: 2009/01/31 (土)