MRTGを使用してGWになるVineLinuxマシンのトラフィックをモニタする。
準備としてはApache2をインストールして、 snmpをここでインストールしたように設定する
snmpはnet-snmpでもよい(Vine 5.xから)
をrpmでインストール
MRTGで使用するsnmpdの設定ファイルは
localhostが全ての情報が読めればよいから
/etc/snmp/snmpd.confで
##com2sec notConfigUser default public com2sec local localhost private #### # Second, map the security name into a group name: # groupName securityModel securityName ##group notConfigGroup v1 notConfigUser ##group notConfigGroup v2c notConfigUser group local_group v1 local group local_group v2c local group local_group usm local #### # Third, create a view for us to let the group have rights to: # Make at least snmpwalk -v 1 localhost -c public system fast again. # name incl/excl subtree mask(optional) ##view systemview included .1.3.6.1.2.1.1 ##view systemview included .1.3.6.1.2.1.25.1.1 view view_all included .1 #### # Finally, grant the group read-only access to the systemview view. # group context sec.model sec.level prefix read write notif ##access notConfigGroup "" any noauth exact systemview none none 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 (略) ---------------------------------------------------------------- Config is DONE! Type 'make' to compile the software ... that wishlist mentioned above does really exist. So if you feel like showing your appreciation for MRTG, this is the place to go. I just love CDs and DVDs -- Tobi Oetiker <tobi@oetiker.ch> ---------------------------------------------------------------- $ 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
#----------------------------------------------------------------- # CPU(Core 0,1)温度状況 #----------------------------------------------------------------- Target[cputemp]: `/usr/bin/sensors | egrep "Core 0:|Core 1:" | awk '{print $3}' | sed -e 's/+//' -e 's/[^0-9+\.].*//'` MaxBytes[cputemp]: 100 Title[cputemp]: Core 0, Core 1 温度状況 PageTop[cputemp]: <h1>CPU(Core0, Core1)の温度</h1> Options[cputemp]: absolute,gauge,nopercent,noinfo #WithPeak[cputemp]: ymw unscaled[cputemp]: dwmy YLegend[cputemp]: Temperature ShortLegend[cputemp]: C LegendI[cputemp]: Core 0 LegendO[cputemp]: Core 1 Legend1[cputemp]: Core 0 Legend2[cputemp]: Core 1
# 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マニュアル