連載
» 2003年05月17日 00時00分 UPDATE

Linux管理者への道(最終回):MRTGによるサーバ監視システムの構築 (1/3)

サーバの状態を長期・継続的に取得してビジュアライズすることで、いままで見えなかったことが見えるようになる。これを実現するソリューションがMRTGだ。(編集局)

[アイティーブースト]

 前回は、コマンドラインベースでサーバの情報を取得する方法をいくつか紹介しました。「現在」の状態を確認するだけであれば前回紹介したツールでも問題ないのですが、システムを監視する場合、「その瞬間」のデータよりも長期的なデータの推移を見たいという方が多いと思います。

 また、多くの場合、人間がシステムを常時監視するわけにはいきません。そのため、定期的にシステムを監視する操作を行い、監視項目が設定した閾値を超えたらメールで管理者に通知するといった処理が必要になります。

 今回は、上記の要件を満たすためMRTGというソフトウェアを利用することを考えてみます。

MRTGとは

 MRTG(Multi Router Traffic Grapher)は、SNMPエージェントから取得したデータを加工してグラフ化するツールです。基本的には、監視対象の機器に対してSNMPリクエスト(iso(1).org(3).dod(6).internet(1).mgmt(2).mib2(1).intreface(2).ifTable(2).ifEntry(1) ifInOctets(10).I/Fポート(1)およびiso(1).org(3).dod(6).internet(1).mgmt(2).mib2(1).intreface(2).ifTable(2).ifEntry(1) ifOutOctets(10).I/Fポート(1))を送信し、取得したデータをPNG画像にします。監視対象のシステムから収集したすべてのデータは過去2年間分保持され、過去1日間、7日間、4週間、12カ月間のトラフィックのグラフを生成するのに利用します。

 MRTGはHTML形式のページを作成するため、ApacheなどHTTPデーモンが動作しているサーバで利用すれば、X Window Systemに頼ることなくWebブラウザ経由でグラフの閲覧が可能です。また、トラフィックの監視だけでなく、あらゆるSNMP変数を監視することが可能です。ほかの外部プログラムを使用して、MRTGで監視されているデータを集約することもできます。

MRTGの導入

 MRTGの本体は以下のWebページで入手可能です。

 なお、MRTGではデータをグラフ化するためのGDライブラリが必要になります。また、GDによって生成される画像形式はPNG形式であるため、libpngが必要になります。そして、libpngは画像圧縮を行うためのzlibが必要になります。このようなソフトウェア同士の依存関係があるため、以下の表にあるソフトウェアを順番にインストールしておく必要があります。

ソフトウェア 説明
zlib データ圧縮ライブラリ
libpng PNG形式の画像用ライブラリ。zlibがインストールされている必要がある
GD 画像生成用ライブラリ。libpngがインストールされている必要がある

 これらのソフトウェアは、システムによってはすでにインストールされていることもあります。また、多くのディストリビューションにはこれらのライブラリパッケージが含まれているので、ディストリビューション付属のパッケージを利用すればよいでしょう。

 ここでは上記ソフトウェアはすでにインストールされているものとし、mrtg-2.9.25.tar.gzを入手した場合のインストール方法を示します。

# tar xvfz mrtg-2.9.25.tar.gz
# cd mrtg-2.9.25
# ./configure
# make
# make install

 デフォルトでは、/usr/local/mrtg-2以下に関係するすべてのファイルがインストールされます。

設定ファイルの作成

 MRTGには、設定ファイルを作成するツールとしてcfgmakerというコマンドが用意されています。動作確認を行うため、cfgmakerを利用してMRTGの設定ファイルを簡単に作成してみましょう。

 設定ファイルの書式は以下の形式になります。

cfgmaker <オプション> コミュニティ名@ホスト名

 今回は/usr/local/apache以下にApacheがインストールされており、/usr/local/apache/htdocs/mrtgをMRTG用のディレクトリにすることとします。また、作成されるMRTG用の設定ファイルは、/usr/local/mrtg-2/lib/mrtg.cfgとして保存するように実行しました。

/usr/local/mrtg-2/bin/cfgmaker \
--output=/usr/local/mrtg-2/lib/mrtg.cfg \
public@192.168.0.2

 以上の操作で設定ファイルが作成されますが、「WorkDir」「Language」「IconDir」の指定を設定ファイルに追加します。

WorkDir:MRTGがHTMLやグラフ画像ファイル類を出力するディレクトリ名。フルパスで指定する必要がある(ex. /usr/local/apache/htdocs/mrtg)
Language:使用する言語の設定
IconDir:生成されるHTMLファイル中に埋め込まれるアイコンが格納されるURLでのパス指定(ex. http://host.domain/mrtg/iconsであれば/mrtg/iconsと指定)

 cfgmakerの実行により、以下のようなファイルが作成されればよいでしょう。

WorkDir: /usr/local/apache/htdocs/mrtg
Language: eucjp
IconDir: /mrtg/icons/


Target[192.168.0.2_2]: 2:public@192.168.0.2:
SetEnv[192.168.0.2_2]: MRTG_INT_IP="192.168.0.2" MRTG_INT_DESCR="eth0"
MaxBytes[192.168.0.2_2]: 1250000
Title[192.168.0.2_2]: Traffic Analysis for 2 -- 192.168.0.2
PageTop[192.168.0.2_2]: <H1>Traffic Analysis for 2 -- 192.168.0.2</H1>
 <TABLE>
   <TR><TD>System:</TD>     <TD>192.168.0.2 in Admin Server</TD></TR>
   <TR><TD>Maintainer:</TD> <TD>Fumihiko Asano 
&lt;mrtguser@myhost.mydomain
&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></TD></TR>
   <TR><TD>Max Speed:</TD>  <TD>1250.0 kBytes/s</TD></TR>
   <TR><TD>Ip:</TD>         <TD>192.168.0.2 (192.168.0.2)</TD></TR>
 </TABLE>
注:#で始まる行はコメント行なので削除しています。赤字が追加した行

 また、IconDirで指定したアイコンを格納するディレクトリを作成し、/usr/local/mrtg-2/share/mrtg2/iconsからPNGファイルをコピーしておきます。

# mkdir -p /usr/local/apache/htdocs/mrtg/icons
# cp /usr/local/mrtg-2/share/mrtg2/icons/*.png
/usr/local/apache/htdocs/mrtg/icons/

MRTGの動作確認

 引数に設定ファイルを指定してmrtgコマンドを実行します。今回は以下のようになります。

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

 ここまでの流れであれば、まずSNMPによって指定したホストのトラフィック量を採取し、PNGグラフを書き出します。初回と2回目は、mrtgコマンド実行時にエラーが表示されます。理由は過去の統計データが存在せず、グラフが作成できないからなので気にしなくても構いません。

# bin/mrtg /usr/local/apache/htdocs/mrtg-test2/mrtg.cfg
Rateup WARNING: /usr/local/mrtg-2/bin/rateup could not read the primary log file for 192.168.0.2_2
Rateup WARNING: /usr/local/mrtg-2/bin/rateup The backup log file for 192.168.0.2_2 was invalid as well
Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't remove 192.168.0.2_2.old updating log file
Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't rename 192.168.0.2_2.log to 192.168.0.2_2.old updating log file
# bin/mrtg /usr/local/apache/htdocs/mrtg-test2/mrtg.cfg
Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't remove 192.168.0.2_2.old updating log file
# bin/mrtg /usr/local/apache/htdocs/mrtg-test2/mrtg.cfg

 3回連続で実行すると、指定したディレクトリにHTMLファイル、MRTGで収集したデータ統計ログ、4つのPNGファイルが作成されます。

ファイル名 説明
TargetName.html 4つのPNG画像を含む、以下の情報を表示するHTMLファイル
TargetName.log MRTGによって採取されたデータのログ
TargetName.old MRTGによって採取された過去のデータのログ
TargetName-day.png 1日分の統計のグラフ画像
TargetName-week.png 1週間分の統計のグラフ画像
TargetName-manth.png 1カ月分の統計のグラフ画像
TargetName-year.png 1年分の統計のグラフ画像

 Apacheが起動している場合、Webブラウザから以下のように指定してすれば作成されたHTMLファイルを確認できます。

http://サーバのIPアドレス/mrtg/192.168.0.2_2.html

MRTGを定期実行する設定

 トラフィックデータを収集・グラフ化するには、MRTGを定期的に実行する必要があります。ここでは2通りの方法を示します。

  • cronによる定期実行

 MRTGを実行すると、SNMPによって監視対象機器のトラフィックデータを収集してログに格納します。また、その時点での統計データをPNGグラフに変換・生成します。そのため、MRTGを定期的に実行し、ログおよびグラフを更新する必要があります。ここではcronを利用し、MRTGを5分ごとに実行させてログ/グラフを更新します。

# crontab -e

を実行し、下記の内容を記入します。

*/5 * * * * /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/lib/mrtg.cfg

RunAsDaemonによるデーモンモード

 通常の実行方法であれば、実行した時点でのデータの収集/グラフ化が完了するとMRTGも終了します。しかし、MRTGの設定ファイルにRunAsDaemonを指定すると、MRTGをデーモンモードで運用できます。この場合、cronで定期実行させる必要がなく、システムに常駐したMRTGが定期的にデータの収集、グラフ化を行います。デフォルトでは5分間隔でMRTGを呼び出し、データ収集作業を行いますが、「Interval:」で測定間隔を任意の値に設定することも可能です。

 つまり、以下のような設定をMRTGの設定ファイルに記述しておくと、MRTGはデーモンとして動き、5分置きにデータを収集します。

RunAsDaemon:Yes
Interval:5

 デーモンモードでMRTGを起動しておく場合、root権限で実行するのはお勧めしません。MRTGを特定のユーザー/グループの権限で動かすようにしましょう。ここではmrtguserというユーザー/グループでMRTGを動作するようにしてみます。その場合、コマンドラインの「--user=ユーザー名」と「--group=グループ名」のオプションを使います。

# useradd mrtguser
# /usr/local/mrtg-2/bin/mrtg --user=mrtguser --group=mrtguser
/usr/local/mrtg-2/lib/mrtg.cfg

 デーモンモードでは、設定ファイルを変更した場合はそれを反映するためにプロセスの再起動が必要なことにも注意してください。また、MRTGによってデータが作成されるWorkDirは、mrtguser権限でデータが作成できるようにパーミッションを設定する必要があります。

# chown -R mrtguser.mrtguser /usr/local/apache/htdocs/mrtg/

       1|2|3 次のページへ

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

編集部からのお知らせ

@IT編集部では、編集記者を募集しています。ご興味のある方は奮ってご応募ください。

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。