MRTGを使用してGWになるVineLinuxマシンのトラフィックをモニタする。
準備としてはApache2をインストールして、 snmpをここでインストールしたように設定する
MRTGで使用するsnmpdの設定ファイルは
localhostが全ての情報が読めればよいから
/etc/snmp/snmpd.confで
com2sec local localhost private group local_group v1 local group local_group v2c local group local_group usm local view view_all included .1 access local_group "" any noauth exact view_all none none
とする。
監視対象の機器に対してSNMPリクエスト(iso(1).org(3).dod(6).internet(1).mgmt(2).mib2(1).intreface(2).ifTable(2).ifEntry(1) ifInOctets(10).I/Fポート(1) がMRTGでは送られる。
それ以外にもzlib,libpng,GDを使用するため zlib-devel,libpng-devel,gd,gd-devel をrpmインストールしておく
ここから mrtg-2.12.2.tar.gzをDownload
$ tar zxvf mrtg-2.12.2.tar.gz $ cd mrtg-2.12.2 $ ./configure $ make $ su # make install
cfgmaker --output=(出力ファイル) (コミュニティ)@(ホスト)
# /usr/local/mrtg-2/bin/cfgmaker --output=/usr/local/mrtg-2/lib/mrtg.cfg private@localhost --base: Get Device Info on private@localhost: --base: Vendor Id: --base: Populating confcache --coca: populate confcache private@localhost: --coca: store in confcache private@localhost_ Descr lo --> 1 --coca: store in confcache private@localhost_ Descr eth0 --> 2 --coca: store in confcache private@localhost_ Descr eth1 --> 3 --coca: store in confcache private@localhost_ Type 24 --> 1 --coca: store in confcache private@localhost_ Type 6 --> 2 --coca: store in confcache private@localhost_ Type 6 --> 3 (duplicate) --coca: store in confcache private@localhost_ Ip 10.99.99.143 --> 2 --coca: store in confcache private@localhost_ Ip 127.0.0.1 --> 1 --coca: store in confcache private@localhost_ Ip 192.168.100.1 --> 3 --coca: store in confcache private@localhost_ Eth --> 1 --coca: store in confcache private@localhost_ Eth 00-0c-29-03-44-1a --> 2 --coca: store in confcache private@localhost_ Eth 00-0c-29-03-44-24 --> 3 --base: Get Interface Info --base: Walking ifIndex --base: Walking ifType --base: Walking ifAdminStatus --base: Walking ifOperStatus --base: Walking ifMtu --base: Walking ifSpeed --base: Writing /usr/local/mrtg-2/lib/mrtg.cfg
# cd /usr/local/mrtg-2/lib
# for UNIX # WorkDir: /home/http/mrtg WorkDir: /usr/local/apache2054/htdocs/mrtg <--変更(グローバル変数) (略) ### Global Defaults # to get bits instead of bytes and graphs growing to the right # Options[_]: growright, bits EnableIPv6: no Language: eucjp <--追加(グローバル変数) IconDir: /mrtg/icons/ <--追加(グローバル変数) ###################################################################### (IPアドレス,インターフェイスを変更した場合は以下を修正できるはず。iptableを INPUTでsnmpをDROPさせてしまう設定をし確認とれず。snmpを再起動の必要があるかも) ### Interface 2 >> Descr: 'eth0' | Name: '' | Ip: '192.168.101.1' | Eth: '00- 03\-99-88-d4-27' ### Target[localhost_2]: 2:private@localhost: SetEnv[localhost_2]: MRTG_INT_IP="192.168.101.1" MRTG_INT_DESCR="eth0" MaxBytes[localhost_2]: 1250000 <--(注1) [MaxBytes1[localhost_2]: 1250000 <--(注2) [MaxBytes2[localhost_2]: 125000 <--(注2) (省略) <tr> <td>Ip:</td> <td>192.168.101.1 ()</td> </tr> (注1) 通常このインタフェースポートが通信できる最大値を1秒当たりのバイト数で記述する。 返された値がもしMaxBytesよりも大きい場合はその値は無視される (注2)値が2つある場合はMaxBytes1,2のようにするとそれぞれのMaxBytesが設定できる。 転送スピードの場合は1が受信2が送信になり、表示グラフの%の値がこれをベースに 表示される。
# mkdir -p /usr/local/apache2054/htdocs/mrtg/icons # cp /usr/local/mrtg-2/share/mrtg2/icons/*.png /usr/local/apache2054/htdocs/ mrtg/icons/
1回,2回はlogがないためエラーするが、3回目にはうまく動作する。 [1回目]
# /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/lib/mrtg.cfg
[LANGの環境変数を変更しているときは(UTF-8にしている時等) # env LANG=C /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/lib/mrtg.cfg
で起動する]
Rateup WARNING: /usr/local/mrtg-2/bin/rateup could not read the primary log file for localhost_2 Rateup WARNING: /usr/local/mrtg-2/bin/rateup The backup log file for localhost_2 was invalid as well Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't remove localhost_2.old updating log file Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't rename localhost_2.log to localhost_2.old updating log file Rateup WARNING: /usr/local/mrtg-2/bin/rateup could not read the primary log file for localhost_3 Rateup WARNING: /usr/local/mrtg-2/bin/rateup The backup log file for localhost_3 was invalid as well Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't remove localhost_3.old updating log file Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't rename localhost_3.log to localhost_3.old updating log file
[2回目]
# /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/lib/mrtg.cfg Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't remove localhost_2.old updating log file Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't remove localhost_3.old updating log file
[3回目]
# /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/lib/mrtg.cfg
http://10.99.99.143/mrtg/localhost_2.html
*/5 * * * * /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/lib/mrtg.cfg
LAN側についてはhttp://(サーバ名)/mrtg/localhost_2.html
WAN側についてはhttp://(サーバ名)/mrtg/localhost_3.html
でアクセスする
snmpで実行されるごとに以下のようなsyslogをはきだす
Jan 12 18:04:18 minipc last message repeated 4 times
これを回避するには
/etc/rc.d/init.d/snmpd のファイルを開き、OPTIONSを次のように変更
ucd-snmpでは
変更前:OPTIONS="-s -l /dev/null -P /var/run/snmpd -a" 変更後:OPTIONS="-l /dev/null -P /var/run/snmpd -a"
net-snmpでは
変更前:OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd -a" 変更後:OPTIONS="-Le -Lf /dev/null -p /var/run/snmpd -a"
オプション表示
# /usr/sbin/snmpd --help (略) L <LOGOPTS> toggle options controlling where to log to e: log to standard error o: log to standard output n: don't log at all f file: log to the specified file s facility: log to syslog (via the specified facility)
/usr/local/mrtg-2/lib/mrtg.cfgに以下のように追加
#----------------------------------------------------------------- # CPUのロードアベレージ #----------------------------------------------------------------- Target[cpu]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:private@local host: ##SetEnv[cpu]: URL="http://localhost/mrtg/cpu.html" <--表示するWebページを指 定?? MaxBytes[cpu]: 100 Unscaled[cpu]: dwmy <--データに合わせて拡大縮小しない Options[cpu]: gauge, absolute, noinfo, nopercent <--パラメータについてを参照 YLegend[cpu]: CPU Load(%) <--Y軸の軸の名前(ラベル)を指定 ShortLegend[cpu]: (%) <--単位の表示 LegendI[cpu]: 1分間平均 LegendO[cpu]: 5分間平均 Legend1[cpu]: 1分間平均(%) <--ページの下の方のラベル Legend2[cpu]: 5分間平均(%) <--ページの下の方のラベル Title[cpu]: CPU使用率 SNMP + MRTG PageTop[cpu]: <H1>CPU使用率 SNMP + MRTG</H1>
CPUロードアベレージはMIBデータでは
1分 : .1.3.6.1.4.1.2021.10.1.5.1 5分 : .1.3.6.1.4.1.2021.10.1.5.2 15分 : .1.3.6.1.4.1.2021.10.1.5.3
HDDについては/etc/snmp/snmpd.confに以下用にパーティションを追加
disk / 10000 <---.1.3.6.1.4.1.2021.9.1.9.1 disk /boot 1000 <---.1.3.6.1.4.1.2021.9.1.9.2
#----------------------------------------------------------------- # ディスク使用状況 #----------------------------------------------------------------- Target[disk]: .1.3.6.1.4.1.2021.9.1.9.1&.1.3.6.1.4.1.2021.9.1.9.2:private@localhost: ##SetEnv[disk]: URL="http://localhost/mrtg/disk.html" MaxBytes[disk]: 100 Unscaled[disk]: dwmy Options[disk]: gauge, absolute, nopercent, noinfo YLegend[disk]: Disk Used(%) ShortLegend[disk]: (%) LegendI[disk]: / Disk used LegendO[disk]: /boot Disk Used Title[disk]: ディスク使用率 NET-SNMP + MRTG PageTop[disk]: <H1>ディスク使用率 NET-SNMP + MRTG</H1>
#----------------------------------------------------------------- # メモリ使用状況(グラフ化するのは実メモリおよびスワップの空き領域) # MaxByteには実験機の総スワップ量を指定 #----------------------------------------------------------------- Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.4.0:private@localhost: ##SetEnv[mem]: URL="http://localhost/mrtg/mem.html" MaxBytes1[mem]: 384944 <-- 実メモリ(TOPコマンドで調べる) MaxBytes2[mem]: 530136 <-- SWAPメモリ Unscaled[mem]: dwmy Options[mem]: gauge, absolute, noinfo YLegend[mem]: Mem Free(Bytes) ShortLegend[mem]: Bytes kilo[mem]: 1024 <-- kiloがデフォルトで1000 kMG[mem]: k,M,G,T,P <-- スケールの単位(K,M,G,T,P)を正しく表示させる LegendI[mem]: Real LegendO[mem]: Swap Legend1[mem]: 空き物理メモリ[MBytes] Legend2[mem]: 空きスワップメモリ[MBytes] Title[mem]: 空きメモリ量 NET-SNMP + MRTG PageTop[mem]: <H1>空きメモリ量 SNMP + MRTG</H1>
パラメータについて
Options: growright -> 現在の時間をグラフの右側に設定する。 gauge -> 取得したデータの値を前回の値との差分を計算せずそのまま使用する。 (ディスク容量やメモリ使用率のグラフに使用) absolute -> 取得したデータの値を前回の値との差分を計算せずそのまま使用 する。gaugeとは異なり、データを計測時間間隔で割ったものを 使用したい場合に指定する。 noinfo -> 出力するページにデバイス名や時刻情報を出力しない bits -> 縦軸の値をbitsとして扱う dorelpercent-> 百分率にしたグラフ[(第1data/第2data)x100]を線として追加する unknaszero -> データ取得できなかった値を0として扱う withzeroes -> 通常0である値は無視されますが、このオプションを指定するこ とでデータを無視しない
以下のような温度モニタ起動シェルを作成
/usr/local/mrtg-2/bin/hddtemp.sh
#!/bin/sh hddtemp=`/usr/local/sbin/hddtemp -n /dev/hda` echo $hddtemp echo $hddtemp uptime | awk '{print $3 $4}' echo uso5001
温度用のMRTGの設定ファイルを作成
/usr/local/mrtg-2/lib/hddtemp.cfg
Language: eucjp IconDir: /mrtg/icons/ EnableIPv6: no Refresh: 300 WorkDir: /home/okada/public_html/hddtemp <--データが格納されるディレクトリ #----------------------------------------------------------------- # HDD温度状況 #----------------------------------------------------------------- Target[hddtemp]: `/usr/local/mrtg-2/bin/hddtemp.sh` ##SetEnv[hddtemp]: URL="http://localhost/mrtg/hddtemp.html" MaxBytes[hddtemp]: 100 Unscaled[hddtemp]: dwmy Options[hddtemp]: gauge YLegend[hddtemp]: Temp (Celsius) ShortLegend[hddtemp]:° ##kilo[hddtemp]: 1024 ##kMG[hddtemp]: k,M,G,T,P LegendI[hddtemp]: HDD温度 LegendO[hddtemp]: HDD温度 Legend1[hddtemp]: HDD温度[℃] Legend2[hddtemp]: HDD温度[℃] Title[hddtemp]: HDD温度 hddtemp + MRTG PageTop[hddtemp]: <H1> HDD温度 hddtemp + MRTG</H1>
*/5 * * * * /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/lib/hddtemp.cfg
# snmpwalk localhost private interface interfaces.ifNumber.0 = 3 <--ポートは全部で3つ interfaces.ifTable.ifEntry.ifIndex.1 = 1 interfaces.ifTable.ifEntry.ifIndex.2 = 2 interfaces.ifTable.ifEntry.ifIndex.3 = 3 interfaces.ifTable.ifEntry.ifDescr.1 = lo interfaces.ifTable.ifEntry.ifDescr.2 = eth0 <--インデックス番号2がイーサポート interfaces.ifTable.ifEntry.ifDescr.3 = eth1 interfaces.ifTable.ifEntry.ifType.1 = softwareLoopback(24) interfaces.ifTable.ifEntry.ifType.2 = ethernetCsmacd(6) <--これがMRTGのTYPEに表示される。 interfaces.ifTable.ifEntry.ifType.3 = ethernetCsmacd(6) interfaces.ifTable.ifEntry.ifMtu.1 = 16436 interfaces.ifTable.ifEntry.ifMtu.2 = 1500 <--MTU interfaces.ifTable.ifEntry.ifMtu.3 = 1500 interfaces.ifTable.ifEntry.ifSpeed.1 = Gauge32: 10000000 interfaces.ifTable.ifEntry.ifSpeed.2 = Gauge32: 10000000 <--速度は10Mbps interfaces.ifTable.ifEntry.ifSpeed.3 = Gauge32: 10000000 interfaces.ifTable.ifEntry.ifPhysAddress.1 = interfaces.ifTable.ifEntry.ifPhysAddress.2 = 0:c:29:3:44:1a <--MACアドレス interfaces.ifTable.ifEntry.ifPhysAddress.3 = 0:c:29:3:44:24 (略)
# snmpget localhost private .1.3.6.1.4.1.2021.4.4.0 enterprises.ucdavis.memory.memAvailSwap.0 = 530136 <--SWAPが530136kフリー
# snmpget localhost private .1.3.6.1.4.1.2021.4.6.0 enterprises.ucdavis.memory.memAvailReal.0 = 130968 <--物理メモリが130968kフリー
$ rpm -qa | grep snmp net-snmp-5.2.1.2-0vl1 net-snmp-devel-5.2.1.2-0vl1 net-snmp-utils-5.2.1.2-0vl1
$ snmpget -v 2c -c private localhost .1.3.6.1.4.1.2021.4.6.0 UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 31136
MRTGマニュアル