Kozupon.com    
 
 MRTGを使ってみよう!


MRTGとは、SNMP(Simple Network Management Protocol)ネットワーク監視プロトコル用のSNMPマネージャである。名前が示すとおり、シンプルなリモートプロトコルである。通常、ネットワークモニタリングする場合、ucd-snmpに含まれるsnmpgetコマンドやsnmpwalkコマンドを使ってもかまわないが、それらのコマンドは残念なことに決して高機能なものとはいえない。そこで何らかのより使いやすいSNMPマネージャが必要となった。MRTGは、集計したデータをHTML形式のファイルと画像ファイルとで出力する。そのため,Webサーバーが動作しているサーバーにMRTGをインストールすれば、集計結果をWebブラウザを通じてリモートで参照できる。
MRTGは、Multi Router Traffic Grapherの略で、数値の統計をとってグラフ化するためのソフトである。したがって、MRTGを使えば定期的にSNMPエージェントに接続し,その統計データをグラフ化することが簡単にできる。ここでは、MRTGのインストールと設定及び起動方法を説明する。


1. MRTGのインストール

MRTGを動作させるためには、以下のソフトがインストールされていなければならない。以下のソフトのインストールは当サイトの 別掲載 があるため、ここでは割愛する。
■ 準備するモジュール
 perl バージョン5.005以上
 gd、グラフィック描画ライブラリ
 libpng、PNG形式イメージを作成するライブラリ
 zlib、libpngが使う圧縮ライブラリ
 snmpエージェント(ターゲットホストへこれを必ず入れる)

1) ここでちょっと面倒なnet-snmpのインストールの説明(以下@の準備が必要なのはCentOS等のRedHatエンタープライズサーバ系)
@ 準備
一般用暗号化ライブラリをインストール。
# yum install beecrypt-devel
コンパイルされたオブジェクトを加工する為の開発ライブラリをインストール。
# yum install elfutils-libelf-devel
注:これらをインストールないとmakeでエラーが出る。

A いよいよ、net-snmpを本格的にインストール
# cd /usr/local/src
# wget http://jaist.dl.sourceforge.net/sourceforge/net-snmp/net-snmp-5.3.0.1.tar.gz
# tar zxvf net-snmp-5.3.0.1.tar.gz
# chown -R root.root net-snmp-5.3.0.1
# cd net-snmp-5.3.0.1
# ./configure
# make
# make install
設定ファイルを生成する。
# cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf
# chmod 600 /usr/local/share/snmp/snmpd.conf
設定ファイルを編集する。
# vi /usr/local/share/snmp/snmpd.conf

# com2sec行のコミニュティを編集する。このホストは、localhostでコミュニティ名はprivateで、その他は192.168.255.0/24でコミュニティ名はpublicと表現。
# sec.name source community
com2sec local localhost private
com2sec mynetwork 192.168.255.0/24 public

# このマシンの設置場所及び用途、管理者及び管理者の連絡先。
syslocation Kozupon michi public server
syscontact Kozupon System Administrator <root@xxxxxxxx.com>

####
# Second, map the security names into group names:
# sec.model sec.name

group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
group MyROGroup v1 mynetwork
group MyROGroup v2c mynetwork
group MyROGroup usm mynetwork

####
# Third, create a view for us to let the groups have rights to:
# incl/excl subtree mask
view all included .1 80

# context sec.model sec.level match read write notif
access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all none

# Make sure mountd is running
proc mountd

# Make sure there are no more than 4 ntalkds running, but 0 is ok too.
proc ntalkd 4

# Make sure at least one sendmail, but less than or equal to 10 are running.
proc sendmail 10 1

# a simple hello world
exec echotest /bin/echo hello world

disk / 10000

load 12 14 14

B SNMPエージェントの起動
# /usr/local/sbin/snmpd

C SNMPの自動起動

■ rc.localで起動する場合
# vi /etc/rc.d/rc.local
省略
# SNMP Start Script
if [ -x /usr/local/sbin/snmpd ]; then
        /usr/local/sbin/snmpd
fi

■ 起動スクリプトを別途作成する場合(Debianの場合)

# vi /etc/init.d/snmp

#!/bin/bash
# net-snmp init file for snmpd
#

OPTIONS="-Ls 1 -Lf /dev/null -p /var/run/snmpd.pid -a"
RETVAL=0
INIT_PROG="snmpd"

start() {
echo -n $"Starting $INIT_PROG: "
if [ $UID -ne 0 ]; then
RETVAL=1
failure
else
/usr/local/sbin/snmpd $OPTIONS
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/snmpd
fi;
echo
return $RETVAL
}

stop() {
echo -n $"Stopping $INIT_PROG: "
if [ $UID -ne 0 ]; then
RETVAL=1
failure
else
killall /usr/local/sbin/snmpd
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/snmpd
fi;
echo
return $RETVAL
}

restart(){
stop
start
}

condrestart(){
[ -e /var/lock/snmpd ] && restart
return 0
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
condrestart)
condrestart
;;
status)
status snmpd
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
RETVAL=1
esac

exit $RETVAL

D ログのローテーション

# vi /etc/logrotate.d/snmp
/var/log/snmpd.log
{
   monthly
   sharedscripts
   postrotate
      /usr/bin/kill -HUP `cat /var/run/snmpd.pid 2>/dev/null`2>/dev/null || true
   endscript
}

2) 本格的にMRTGのインストール

MRTGのWebページ http://www.mrtg.org/ には、MRTG( mrtg-2.14.3.tar.gz )をダウンロードするページへのリンクがある(ただし、改訂執筆時点最新2006年5月バージョン)。

(1)mrtg-2.14.3.tar.gzをダウンロードする
# cd /usr/local/src
# wget http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/mrtg-2.14.3.tar.gz

(2)展開する
ダウンロードしたディレクトリにカレントディレクトリを移し,次のようにtarコマンドを使って展開する。
# tar -zxvf mrtg-2.14.3.tar.gz
# chown -R root.root mrtg-2.14.3

(3)環境設定する
カレントディレクトリに mrtg-2.14.3 というディレクトリができるので,そのディレクトリに移動する。
# cd mrtg-2.14.3
# ./configure

(4)makeする
# make

# make install

以上でMRTGのインストールは完了。MRTGのファイルは,/usr/local/mrtg-2ディレクトリにコピーされる。

(5)MRTGの設定と起動
MRTGのインストールが終わったならば,MRTGの設定をする。
MRTGで出力されるファイルは,統計をとりたい分野ごとに,GIF形式またはPNG形式の画像ファイルとそれを含むHTMLファイルとで構成される。

画像ファイルの形式は、MRTGのコンパイルオプションならびにインストールされているgdライブラリのバージョンに依存する。gdライブラリは,ライセンスの関係上、バージョン1.6以降ではGIF形式をサポートしなくなった。そのためgdライブラリのバージョンが1.6以降であれば、PNG形式となる。

これらのファイルは1つのディレクトリに配置されるので,まず,これらのファイルを格納するディレクトリを用意する。ここでは,仮に/usr/local/apache/htdocs/mrtgというディレクトリをワークディレクトリとして作ることにする。さらに、設定ファイルのディレクトリとして、/etc/mrtgを作成する。

# mkdir /usr/local/apache/htdocs/mrtg
# mkdir /etc/mrtg

MRTGの実行にはroot権限は必ずしも必要いうわけではない。もしユーザーのホームディレクトリ(/home/ユーザー名など)以下にMRTGの結果を保存するのであれば,rootユーザーではなく一般ユーザーで作業してもよい。

データ保存先のディレクトリを作ったならば、次に設定ファイルを作る。設定ファイルをいちから作ってもよいのだが、それは面倒だ。そこで,MRTGにはcfgmakerというプログラムが用意されていて、それを使うとMRTGの設定ファイルを自動的に作成できる。cfgmakerは、次のように実行する。以下でpublicはコミュニティ名で@マーク以降は、ターゲットホストのIPアドレスかDNSで解決できるホスト名を設定する。ここで、--no-down と言うおまじないのようなオプションパラメータを入れないと、俺の場合エラーが取れなかった。まいっかでここでは深く考えない(笑)。

/usr/local/mrtg-2/bin/cfgmaker --no-down public@SNMPエージェントのIPアドレス

そうすると設定ファイルが標準出力に書き出されるので,通常はそれをリダイレクトする。たとえば,コミュニティ名がpublicで,データを参照したいSNMPエージェントが動作するターゲットホストのIPアドレスが192.168.255.6である場合、設定ファイルを/etc/mrtg/mrtg.cfgというファイル名として書き出すには,次のようにする。

# /usr/local/mrtg-2/bin/cfgmaker --no-down public@192.168.255.6 > /etc/mrtg/mrtg.cfg

プログラムの実行が完了すれば,/etc/mrtg/mrtg.cfgファイルが作られるはずだ。以下,このようにしてできたmrtg.cfgファイルをcfgファイルと称す。


2. cfgファイルの編集

cfgファイルにはいくつかの設定項目があるが、必ず設定しなければならないのは、青色の部分だ。難しい構文ではないので理解できると思う。下の方の、タグの部分は出力するHTMLのひな形である。

# vi /etc/mrtg/mrtg.cfg
# for UNIX
# ワークディレクトリの指定

WorkDir: /usr/local/apache/htdocs/mrtg

# to get bits instead of bytes and graphs growing to the right
Options[_]: growright, bits

# IPv6は使わない
EnableIPv6: no

# ランゲージはEUC JP
Language:eucjp
# 生成されたhtmlのファイル名は、michi_server
Target[michi_serve]: 2:private@127.0.0.1:

SetEnv[michi_serve]: MRTG_INT_IP="192.168.255.6" MRTG_INT_DESCR="eth0"

MaxBytes[michi_serve]: 12500000

# 出力結果タイトル
Title[michi_serve]: トラフィックアナリシス for michiローカルサーバ

PageTop[michi_serve]: <h1>トラフィックアナリシス for michiローカルサーバ</h1>
<div id="sysdetails">
<table>
<tr>
<td>System:</td>
<td>michi in Kozupon michi private server</td>
</tr>
<tr>
<td>Maintainer:</td>
<td>michi System Administrator &lt;root@xxxxxxxx.com&gt;</td>
</tr>
<tr>
<td>Description:</td>
<td>eth0 </td>
</tr>
<tr>
<td>ifType:</td>
<td>ethernetCsmacd (6)</td>
</tr>
<tr>
<td>ifName:</td>
<td>eth0</td>
</tr>
<tr>
<td>Max Speed:</td>
<td>12.5 MBytes/s</td>
</tr>

<tr>
<td>Ip:</td>
<td>192.168.255.6 (michi.xxxxxxxx.com)</td>
</tr>

</table>
</div>

以上で,とりあえずの設定は完了だ。

ちなみに、参考までに俺のオリジナルのmrtg.confの全内容は、

WorkDir: /usr/local/apache/htdocs/mrtg

Options[_]: growright, bits

EnableIPv6: no

Language:eucjp

Target[sub2_server]: 2:public@192.168.255.103:
SetEnv[sub2_server]: MRTG_INT_IP="192.168.255.103" MRTG_INT_DESCR="eth0"
MaxBytes[sub2_server]: 87500
Title[sub2_server]: Traffic Analysis NET-SNMP + MRTG Traffic for sub2.kozupon.com
PageTop[sub2_server]: <h1>Traffic Analysis NET-SNMP + MRTG for sub2.kozupon.com</h1>

# 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:public@192.168.255.103
MaxBytes[cpu]: 100
Unscaled[cpu]: dwmy
Options[cpu]: gauge, absolute, growright, noinfo, nopercent
YLegend[cpu]: CPU Load(%)
ShortLegend[cpu]: (%)
LegendI[cpu]: 1分間平均
LegendO[cpu]: 5分間平均
Legend1[cpu]: 1分間平均(%)
Legend2[cpu]: 5分間平均(%)
Title[cpu]: CPU使用率 NET-SNMP + MRTG for sub2.kozupon.com
PageTop[cpu]: <H1>CPU使用率 NET-SNMP + MRTG for sub2.kozupon.com</H1>

# Memory
Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.4.0:public@192.168.255.103
MaxBytes1[mem]: 190764
MaxBytes2[mem]: 385552
Unscaled[mem]: dwmy
Options[mem]: gauge, absolute, growright, noinfo
YLegend[mem]: Mem Free(Bytes)
ShortLegend[mem]: Bytes
kilo[mem]: 1024
kMG[mem]: k,M,G,T,P
LegendI[mem]: Real
LegendO[mem]: Swap
Legend1[mem]: 空き物理メモリ[MBytes]
Legend2[mem]: 空きスワップメモリ[MBytes]
Title[mem]: 空きメモリ量 NET-SNMP + MRTG for sub2.kozupon.com
PageTop[mem]: <H1>空きメモリ量 NET-SNMP + MRTG for sub2.kozupon.com</H1>

# Disk
Target[disk]: .1.3.6.1.4.1.2021.9.1.9.1&.1.3.6.1.4.1.2021.9.1.9.1:public@192.168.255.103
MaxBytes[disk]: 100
Unscaled[disk]: dwmy
Options[disk]: gauge, absolute, growright, nopercent, noinfo
YLegend[disk]: Disk Used(%)
ShortLegend[disk]: (%)
LegendI[disk]: / Disk used
LegendO[disk]: / Disk Used
Legend1[disk]: / Disk used
Legend2[disk]: / Disk used
Title[disk]: ディスク使用率 NET-SNMP for sub2.kozupon.com
PageTop[disk]: <H1>ディスク使用率 NET-SNMP for sub2.kozupon.com</H1>


3. MTRGの実行

1) 一回実行してみる
MRTGを実行してみる。MRTGを実行するには,次のようにmrtgコマンドの引数にcfgファイル名を渡せばよい。
今回は,先にcfgmakerコマンドで作っておいた/etc/mrtg/mrtg.cfgファイルを設定ファイルとして実行するので,次のようにする。

# /usr/local/mrtg-2/bin/mrtg /etc/mrtg/mrtg.cfg

注:初回実行時と2回目に実行したときには、いくつかのワーニングメッセージが出るが、これは過去の統計データが存在しないという意味であり無視してかまわない。3回目以降は、ワーニングメッセージは出なくなる。

2) 運用は九龍で
デーモンとして実行したままのスクリプトではないので、MRTGは九龍で定期的に実行する必要がある。したがって、以下のような指定を/etc/crontabへ書く。

# vi /etc/crontab
省略
0-59/5 * * * * root /usr/local/mrtg-2/bin/mrtg /etc/mrtg/mrtg.cfg
   ← 5分ごとに九龍で実行

3) 実行結果を表示させる
実行が完了すると、/usr/local/apache/htdocs/mrtgディレクトリに、HTMLファイルと画像ファイルができる。ちなみにここでは、
■ sub2_server.html
ファイルをブラウザで実行すると、以下の図1図2のようなサーバトラフィックの結果が得られる。


  図1

 


  図2

■ cpu.html ファイルをブラウザで実行すると、以下の図3図4のようなCPU使用率の結果が得られる。


  図3


  図4

■ mem.html ファイルをブラウザで実行すると、以下の図5図6のような空きメモリ量の結果が得られる。


  図5


  図6

■ disk.html ファイルをブラウザで実行すると、以下の図7図8のようなディスク使用率の結果が得られる。


  図7


  図8

以上


 
 
 



Copyright 2005 Kozupon.com.