MRTG

更新日2011-10-23 (日) 06:53:12

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インストールしておく

Download/Install

ここから 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

mrtg.cfgを編集

#  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が送信になり、表示グラフの%の値がこれをベースに
表示される。

mrtgのフォルダ作成と画像のコピー

# 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

cronで5分ごとにデータを収集

*/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のロードアベレージ

#-----------------------------------------------------------------
# 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である値は無視されますが、このオプションを指定するこ
                    とでデータを無視しない

外部プログラム(hddtemp)でHDDの温度のモニタ

以下のような温度モニタ起動シェルを作成

/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>

cronで5分ごとにデータを収集

*/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フリー

net-snmpの場合は以下のようなコマンドで情報を得る。

$ 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マニュアル


元ページ

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS