MRTGを使ったネットワーク監視技法

第9回rrdtoolを使う

今回は、MRTGの機能を補完するツール、rrdtoolについて使用方法を紹介します。

MRTGの弱点と改善策

MRTGは、5分ごとに監視対象機器からデータを取得しますが、同時にグラフファイルの作成も常に行っています。また取得データは、テキストファイルに保存しているため、効率もあまりよくありません。

これらの点を改善するために、MRTGの作者のTobias氏は取得データの保存と閲覧を別々のプログラムで行うように機能拡張しています。それがrrdtoolというデータベースツールです。RRDとはRound Robin Databaseを指していますが、新しいデータを一番古いデータ箇所に書き、輪のように繰り返していくことで、効率よくデータを保管するようにしたものです。

rrdtoolのインストール

rrdtoolは、1.3.x, 1.2.x, 1.0.xの3つのバージョンがあります。rrdtool-1.0.xは、このtarballだけで、実行プログラムを生成できますが、それより上のバージョンは依存関係にあるパッケージをインストールしなければなりません。

実際のところ、1.2.xでは10個もないので、1つずつインストールしていってもなんとかできるのですが、1.3.xは手に負えないほどのパッケージの量になります。しかし、FreeBSDではportsを使うことで、それらの依存パッケージも含めて容易にインストールできますので、ここでは時間こそかかりますが、Portsを利用して、rrdtool-1.3.7をインストールすることにします。

# cd /usr/ports/databases/rrdtool
# make
# make install

このPortsを使うことで、依存関係にある約60個のパッケージがインストールされます。インストールされるパッケージは、以下のコマンドでリストできますので、導入済みプログラムに影響がないか、確認しておきましょう。

# make all-depends-list

rrdtoolを使うための設定

Portsからrrdtoolをインストールすると、実行に必要なプログラム等は、以下のパスにインストールされます。

rrdtool/usr/local/bin
Library/usr/local/lib/perl5/site_perl/5.8.9

この情報をmrtg.cfgに反映させるわけですが、mrtg.cfgはスクリプトを使って作成してきました。よってrrdtoolを使う設定もスクリプトに記述して、mrtg.cfgに反映させることにします。以下の赤色で強調された3行を追加してください。

リスト cfg_mrtg2.shの編集
/usr/local/mrtg-2/bin/cfgmaker \
    --global "WorkDir: /usr/local/apache2/htdocs/mrtg2" \
    --global "IconDir: /mrtg/icons/" \
    --global "options[_]: growright,bits" \
    --global "Language: eucjp" \
    --global "LogFormat: rrdtool" \
    --global "PathAdd: /usr/local/bin/" \
    --global "LibAdd: /usr/local/lib/perl5/site_perl/5.8.9/" \
    --if-template cfg_mrtg2.temp \
    --output="mrtg2.cfg" \
    [email protected] \
    [email protected] \
    [email protected]

(これまでのものと区別するためにmrtg2と名称変更しています)

実行

この設定で、保存データは従来の形式に代わって、RRD形式で作成されるようになります。

# ls /usr/local/apache2/htdocs/mrtg2/192.168.1.201
192.168.1.201_65539.rrd

もし、この.rrdファイルが作られない場合には、cronの実行ユーザ宛に届いているメールを見てください。エラー情報が記載されていると思います。サブディレクトリに書き込み権限がない場合などを含め、すぐに原因がわかると思います。

グラフを見る

rrdtoolのパッケージには、簡単にグラフを見るためのユーティリティは含まれていません。このため他から持ってこなければなりませんが、その1つに「14all.cgi」があります。14all.cgiはPerlで作られたCGIで、設定が簡単でMRTGのindexmakerも含めて、親和性が高いのが特徴の一つです。

14all.cgiはhttp://my14all.sourceforge.net/からダウンロードできます。"The CGI itself"のところに、"14all.cgi v1.1p25"がありますので、これを取得し、以下のパスに保存します。

/usr/local/apache2/cgi-bin/14all.cgi

ファイル名は、ここにあるように"14all.cgi"にしてください。

次にこのファイルの修正です。修正箇所は以下のとおりです。

63行目$cfgfile = '';
$cfgfile = 'mrtg2.cfg';
66行目$cfgfiledir = '';
$cfgfiledir = '/usr/local/mrtg-2/conf';
632, 692行目(2箇所同じステートメントがあり、両方を変更する)
print $q->header(@httphead), $q->start_html(@htmlhead);
print $q->header(@httphead,-charset=>'EUC'), $q->start_html(@htmlhead,-lang=>'ja-JP');

なお、632, 692行目の修正は、日本語が文字化けしないように表示するためのものです(参考:http://www.hrst.jp/2009/02/14allcgi.html⁠。

さて、最後に、indexmakerを使い、index.htmlを再作成します。indexmakerは、mrtg.cfgなどの設定をファイルを読み込んだ際、rrdtoolが使われていると、index.htmlに/cgi-bin/14all.cgiを起動するような記述に変わります。

これで、http://(サーバのアドレス)/mrtg2/にアクセスしてください。以下のグラフが表示されれば成功です。グラフをクリックすれば、1週間、1ヵ月、1年のグラフも表示されます。

 14all.cgiを使ったアクセス画面
図 4all.cgiを使ったアクセス画面

他の閲覧ソフトウェア

今回は、簡単にrrdtoolを使ってできたデータを閲覧するために、14all.cgiを取り上げました。rrdtoolの閲覧ソフトウェアの作成はあまり活発とは言えない状況ですが、他にもいくつか作られていますので、ご紹介しておきます。

mrtg-rrd.cgi

14all.cgiより見栄えがいい気がします。取り扱いは14all.cgiとあまり変わりませんが、より高速にCGIを処理できるようにFastCGIと組みあせた使用法が推奨されています。

http://www.fi.muni.cz/~kas/mrtg-rrd/

routers2.cgi

「Using MRTG with RRDtool and Routers2」という書籍を書かれたSteve氏がその書籍でも紹介し、またWebサイトでも公開しているツールです。見た目はだいぶ派手な感じがします。

http://www.steveshipway.org/software/

,

おすすめ記事

記事・ニュース一覧