MRTG のインストール (パッケージがない頃の話)
o MRTG の基本的な設定方法
例えば、SNMPをサポートしたルータの入出力を MRTGで処理するには...
ルータのIPアドレスを 10.0.0.1、SNMPコミュニティ名を publicとすると
cfgmaker を使って設定ファイルが作れる。
当然ルータへの SNMP的な read 権限がなければダメ。
% cfgmaker public@10.0.0.1 >> mrtg.cfg
※ BER.pm と SNMP_Session.pm がカレントディレクトリに無いと怒られる。適時コピーする。
以下を mrtg.cfg に追加する。
WorkDir: /var/log/mrtg <-- 作業ディレクトリ
Interval: 5 <-- cron の時間。分単位。
Refresh: 300 <-- HTTP-EQUIV=Refresh の値
WriteExpires: Yes <-- HTTP-EQUIV=Expires を付ける
Directory[10.0.0.1.1]: 10.0.0.1 <-- subdirectoryを使う。
Options[10.0.0.1.1]: growright <-- グラフが左に流れる
- indexmaker で index.html を作る。
% indexmaker mrtg.cfg 'MRTG View' 10.0.0.1 > index.html
- index.html を適当に編集
特に各ヘッダになる所。
サンプル
WorkDir: /usr/home/sakane/public_html/mrtg
Refresh: 300
Interval: 5
WriteExpires: Yes
Target[10.0.0.1.1]: 1:public@10.0.0.1
Directory[10.0.0.1.1]: 10.0.0.1
Options[10.0.0.1.1]: growright
MaxBytes[10.0.0.1.1]: 1250000
Title[10.0.0.1.1]: LAN
PageTop[10.0.0.1.1]: <H1>Traffic Analysis for LAN </H1>
<TABLE>
<TR><TD>System:</TD><TD> in </TD></TR>
<TR><TD>Maintainer:</TD><TD></TD></TR>
<TR><TD>Interface:</TD><TD>LAN (1)</TD></TR>
<TR><TD>IP:</TD><TD>10.0.0.1</TD></TR>
<TR><TD>Max Speed:</TD><TD>1250.0 kBytes/s (ethernetCsmacd)</TD></TR>
</TABLE>
- cron 等に設定する。
mrtg.cfg は /var/log/mrtg に置いてあるとする。
e.g.1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/bin/mrtg /var/log/mrtg/mrtg.cfg > /dev/null 2>&1
e.g.2
*/5 * * * * /usr/local/bin/mrtg /var/log/mrtg/mrtg.cfg > /dev/null 2>&1
※ 詳しくは man 5 crontab してみる。
o 主なパラメータの意味
http://people.ee.ethz.ch/~oetiker/webtools/mrtg/reference.html
WorkDir: mrtg の作業ディレクトリ
Refresh: Netscape の refresh rate
WriteExpire: HTML にEXPIREタグを含める
- ターゲット毎に設定する項目
項目名の後ろに大括弧を使ってターゲットを指定
e.g. Title[hoge]
Directory: データを置くディレクトリを指定。WorkDirの下。
Target: ターゲットを指定
e.g.
Target[foo]: 1:public@10.0.0.1
OIDを直接指定出来る。
e.g.
Target[hoge]: 1.3.6.1.2.1.2.2.1.14.1&1.3.6.1.2.1.2.2.1.20.1:public@myrouter
Target[hage]: ifInErrors.1&ifOutErrors.1:public@myrouter
コマンドを実行出来る。
e.g.
Target[var]: `/usr/home/public_html/mrtg/bin/mrtg-ping-probe 10.0.0.1`
MaxBytes:
最大値を指定。AbsMaxを設定しない時に MaxBytes を越えた値は無視される。
値としては T1 = 193000, 56K = 7000, Ethernet = 1250000 等
e.g. MaxBytes[hoge]: 1250000
AbsMax: MaxBytes を越える値を扱いたい時に指定
YTics:
Y軸のメモリの数を指定
YTicsFactor]:
Y軸の値に、ここで指定した値をかける。
e.g. ログのデータを 1/10 したい場合は、0.1 を指定する。
Title: データのタイトルを指定。HTML に吐き出される。
PageTop: データの見出し。HTML に吐き出される。
Unscaled: 指定した集計の表示を省略する
値は d=day w=week m=month y=year
e.g. month,yearを省略するには my を指定する
Supress: 指定したデータ収集を省略する。
値は d=day w=week m=month y=year
e.g. Unscaled[hage]: y
WithPeak:
XSize: グラフのX方向のサイズを指定
YSize: グラフのY方向のサイズを指定
XSize must be between 20 and 600
YSize must be larger than 20
Options:
growright: 左に進むグラフにする。デフォルトは右。
bits: ビット単位になる。値を8倍する。
noinfo: uptime, device名を省略
gauge: 拾う値が積算値じゃないことを指定
absolute: 取得する毎に積算値がクリアするタイプの時に指定。平均値の計算に影響する?
absolute または gauge が指定されないと差分が表示される。
Timezone:
タイムゾーンを設定する。
MRTGは環境変数TZを使ってるだけなので、設定する値はシステム依存。
FreeBSDとかの 4.4BSD系のでは…
Asia/Tokyo が使える。
GMT+9 とかも使えるが、+ と - が逆っぽい。
例えば、GMT-9 としないと日本時間にならない。
MRTGの問題ではなく、man 3 tzset すると
Indicates the value one must add to the local time to
arrive at Coordinated Universal Time.
よって逆じゃなくて仕様。
- ワイルドカード
ターゲット毎に設定する項目に対してデフォルト値などを設定する
デフォルト値の指定: "_" を使う
e.g. MaxBytes[_]: 1250000
※ 値を省略するとMRTG自体のデフォルト値が使われる。
LegendI[_]:
すると "Incoming Traffic in Bits per Second" が使われちゃう。
設定した値を、ターゲット毎に設定した値の先に加えたい: "^" を使う
PageTopに使うと便利。Targetにも使える。
e.g. Target[^]: 1:public@10.0.0.1 +
Target[hoge1]: 2:public@10.0.0.1
Target[hoge2]: 3:public@10.0.0.1
hoge1 と hoge2の値に常に 1:public@10.0.0.1 が加算される
設定した値を、ターゲット毎に設定した値の後に加えたい: "$" を使う
o ping-probe によるターゲットへの RTT を測定。
- contrib/ping-probe の以下のファイルを bin へコピー
mrtg-ping-probe
mrtg-ping-cfg
- FreeBSD は以下のパッチを当てる。
ping-probe 1.11用
※freebsd対応しているようだけど、ping の出力があってない。
ping-probe 1.9用
※freebsd対応していない。
- cfg を作る。
% bin/mrtg-ping-cfg 10.0.0.1 'ping 10.0.0.1' >> mrtg.cfg
- cfg を編集。
Target のパスと Directory を適当にあわせる。
好みで Options に growright を追加。
mrtg.cfg サンプル
※WorkDir とかは除外
Title[ping.10.0.0.1]: ping 10.0.0.1
Directory[ping.10.0.0.1]: ping.10.0.0.1
MaxBytes[ping.10.0.0.1]: 5000
AbsMax[ping.10.0.0.1]: 10000
Options[ping.10.0.0.1]: gauge, growright
Target[ping.10.0.0.1]: `/usr/home/public_html/mrtg/bin/mrtg-ping-probe 10.0.0.1`
PageTop[ping.10.0.0.1]: <H1>ping 10.0.0.1</H1>
<P>Actually we are measuring the ping time between our web server and 10.0.0.1.
YLegend[ping.10.0.0.1]: Round Trip Time
ShortLegend[ping.10.0.0.1]: ms
Legend1[ping.10.0.0.1]: Maximum Round Trip Time in Milli Second
Legend2[ping.10.0.0.1]: Minimum Round Trip Time in Milli Second
Legend3[ping.10.0.0.1]: Maximal 5 Minute Maximum Round Trip Time
Legend4[ping.10.0.0.1]: Maximal 5 Minute Minimum Round Trip Time
LegendI[ping.10.0.0.1]: Max:
LegendO[ping.10.0.0.1]: Min:
WithPeak[ping.10.0.0.1]: ymwd
o nnstat によるトラフィック測定
statspy の stat.conf のサンプル
スクリプト
mrtg.cfg サンプル
※WorkDir とかは別
Title[nnstat.pc1.telnet]: nnstat for pc1.telnet
Directory[nnstat.pc1.telnet]: nnstat.pc1.telnet
MaxBytes[nnstat.pc1.telnet]: 1250000
Options[nnstat.pc1.telnet]: growright, bits
Target[nnstat.pc1.telnet]: `/usr/home/sakane/public_html/mrtg/bin/mrtg-nnstat-probe pc1 ULP.telnet`
PageTop[nnstat.pc1.telnet]: <H1>nnstat for pc1.telnet</H1>
YLegend[nnstat.pc1.telnet]: Bytes
ShortLegend[nnstat.pc1.telnet]: B
Legend1[nnstat.pc1.telnet]: FTP packets
Legend2[nnstat.pc1.telnet]: TELNET packets
Legend3[nnstat.pc1.telnet]: SMTP packets
Legend4[nnstat.pc1.telnet]: HTTP packets
WithPeak[nnstat.pc1.telnet]: ymwd
o hotnode による温度の測定
hotnodeは IPv6スタックを積んだ温度センサーである。
遊び方は『HotNodeを使ってみる』を参照。
スクリプト
mrtg.cfg サンプル
Target[inode0]: `/usr/local/bin/mrtg-hotnode-fetch http://inode0.kame.net/`
Title[inode0]: The temperature of the server room
PageTop[inode0]: <H1>The temperature of the server room</H1>
YLegend[inode0]: temp. (Celsius)
ShortLegend[inode0]: C°
MaxBytes[inode0]: 300
AbsMax[inode0]: 1000
YTics[inode0]: 5
YTicsFactor[inode0]: 0.1
Factor[inode0]: 0.1
WithPeak[inode0]: ymwd
Unscaled[inode0]: d
Options[inode-srv]: growright, gauge
Legend1[inode-srv]:
Legend2[inode-srv]: temperature in degree
Legend3[inode-srv]:
Legend4[inode-srv]: 5 minute maximum temperature in degree
LegendI[inode-srv]:
LegendO[inode-srv]: Max:
o なんとなくパッチ
cfgmakerへのパッチ
TIMEZONEを日本にする。
グラフの時間を右が過去にする。
mrtg-cfgmaker.patch
なんとなく indexmakerへのパッチ
mrtg-indexmaker.patch
o mrtg を覗いてみる
TO BE WRITTEN
$main::DEBUG=1;
DEBUG > 2 だともっと出る。
5 位まである。
main()
for {
getcurrent(処理する router の name, uptime, time(?), やら)
writegraphics();
writehtml();
}
writegraphics()
{
パラメータを調整;
exec rateup ...
}
rateup:
(work directory)
/usr/home/sakane/public_html/mrtg/ping.127.0.0.1/ ping.127.0.0
.1 905235143 g 0 0 10000 c #00cc00 #0000ff #006600 #ff00ff l [Round Trip Time] i
ping.127.0.0.1-day.gif -5000 400 100 1 1 1 300 0
o 準備 (パッケージがない頃の話)
FreeBSD 2.2.8 から mrtg-2.5.3 がパッケージ化されている。
- GD のインストール
GD を拾ってくる。
http://www.boutell.com/gd/
make すると malloc.h が無いと怒られる。
BSD/OS2.1は、いらないから削除。
FreeBSD はパッケージから突っ込む。なんて便利…
- perl5.003 以上が必要なのでインストール
FreeBSD はパッケージから突っ込む。すばらしく便利…
o MRTG のインストール (パッケージがない頃の話)
- MRTG を拾ってくる。
最新版はhttp://www.ee.ethz.ch/~oetiker/webtools/mrtg/pub/から。
- GD のライブラリやincludeファイルへのパスを Makefile へ設定しておく
FreeBSD でパッケージを使っている場合は、
GD_INCLUDE=/usr/local/include/gd
GD_LIB=/usr/local/lib
- perl5 へのパスを Makefile へ設定
- さて make
% make rateup
% make substitute
- 適当なディレクトリを例えば mrtg とか掘る。
- そこに mrtg*.gif をコピー。
- mrtg/bin に以下をコピー
BER.pm
SNMP_Session.pm
mrtg
rateup
cfgmaker
indexmaker