MRTG

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

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

Download/Install

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

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

CPU Core温度 (i3)

#-----------------------------------------------------------------
# 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フリー

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