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

第8回indexmakerを使う

index.htmlを作る

前回cfgmakerを使って、完成したmrtg.cfgを作成する手順を示しました。仮に監視対象機器が追加になった場合でも、cfg_mrtg.shとテンプレートのcfg_mrtg.tempを修正することで、容易に対応できるようになっています。

さて、今、3つの機器を監視するとしましょう。前回の例では、mrtg.cfgにDirectoryキーワードが記述されているため、各監視対象機器のデータの保存先は、/usr/local/apache2/htdocs/mrtgの下に作られるサブディレクトリになります。

# ls -F /usr/local/apache2/htdocs/mrtg
192.168.1.201/  192.168.1.203/  192.168.1.208/  icons@

この状態で、それぞれの監視対象機器のトラフィック状況を見るには、

  • http://MRTGのサーバアドレス/mrtg/192.168.1.201/

のように、サブディレクトリ名を指定してアクセスすることになりますが、この指定方法は効率的ではありません。やはり、これらのサブディレクトリへリンクを張ったインデックスファイル(index.html)が必要になります。

なお、3つの監視対象機器用のcfg_mrtg.shとcfg_mrtg.tempは以下のようになります.

スクリプト cfg_mrtg.sh
/usr/local/mrtg-2/bin/cfgmaker \
    --global "WorkDir: /usr/local/apache2/htdocs/mrtg" \
    --global "IconDir: /mrtg/icons/" \
    --global "options[_]: growright,bits" \
    --global "Language: eucjp" \
    --output="mrtg.cfg" \
    HIMITSU@192.168.1.208 \
    HIMITSU@192.168.1.203 \
    HIMITSU@192.168.1.201
テンプレート cfg_mrtg.temp
$head_lines="";
$problem_lines="";
$target_lines="";
$separator_lines="";

if ($if_ok) {

  my( $TN ) = $target_name;

  #                                  MaxBytes, Title
    if ($TN eq "192.168.1.208_1") {SL( 1250000,  "ルータ1" )};
    if ($TN eq "192.168.1.201_65539") {SL( 1250000,  "ルータ2" )};
    if ($TN eq "192.168.1.203_65539") {SL( 1250000,  "ルータ3" )};
}

sub SL
{
    my ($MaxBytes, $Title ) = @_;
    my ($bps);
    my ($MK);

    $bps = $MaxBytes * 8.0 / 1000000.0;
    if ( $bps < 1.0 ) {
        $bps = $bps * 1000;
        $MK = "Kbps";
    } else {
        $MK = "Mbps";
    }

$target_lines .= <<HTMLTEXT;
Target[$target_name]: $if_index:$router_connect
MaxBytes[$target_name]: $MaxBytes
Title[$target_name]: $Title [ $bps $MK ] $sysname : $target_name
Directory[$target_name]: $router_name
PageTop[$target_name]: <H1>$Title : $sysname : $target_name</H1>
  <div>
  <TABLE>
    <TR><TD>システム名</TD><TD>$sysname</TD></TR>
    <TR><TD>場所</TD>      <TD>$html_syslocation</TD></TR>
    <TR><TD>担当者</TD>    <TD>$html_syscontact</TD></TR>
    <TR><TD>回線速度</TD>  <TD>$bps $MK</TD></TR>
  </TABLE>
  </div>

HTMLTEXT

}

indexmakerを使う

MRTGには、mrtg.cfgを読んで、監視対象機器ごとのHTMLファイルにリンクを張ったindex.htmlを作るプログラムが用意されています。それがindexmakerです。

使い方は簡単です。indexmakerに、引数としてmrtg.cfgを渡してやるだけです。結果は標準出力にでますので、リダイレクトして、index.htmlを作成します。

# /usr/local/mrtg-2/bin/indexmaker /usr/local/mrtg-2/conf/mrtg.cfg > /usr/local/apache2/htdocs/mrtg/index.html

これで、http://MRTGのサーバアドレス/mrtg/ にアクセスすることで、mrtg.cfgに記載された監視対象機器へのリンクが張られたページが表示されます。

図1 indexmakerで作成したindex.html(ただし日本語が文字化けしている)
図1 indexmakerで作成したindex.html(ただし日本語が文字化けしている)

日本語表示ができるようにする

標準のままのindexmakerを使うと、図1のように、mrtg.cfgで日本語を使っていた箇所が文字化けしてしまいます。これはindexmakerがキャラクターセットにiso-8859-15を決め打ちするためです。ここは直接indexmakerを修正して、EUC-JPを指定してしまいましょう。

viなどのエディッタでindexmakerを以下のように書き換えます。これで装置名などに指定した日本語も正しく表示されるようになります。

修正前
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15" >
修正後
<meta http-equiv="content-type" content="text/html; charset=euc-jp" >
図2 正しく日本語が表示された画面
図2 正しく日本語が表示された画面

表示サイズを変える

上記のように単純にindexmakerで、index.htmlを作ると、横2列にグラフが表示されますが、1024×768ピクセルのXGAの画面でもはみ出てしまいます。これでは、扱いにくいので、グラフのサイズを変更しましょう。

図3 画面からはみ出したページ
図3 正しく日本語が表示された画面

標準のグラフは、500×135ピクセルです。これを70%位のサイズの350×95ピクセルにします。

いつものように、indexmakerの実行文もスクリプトファイルにして残しておくようにします。ここでは、indexmaker.shというスクリプトにします。

スクリプト indexmaker.sh 始まり
/usr/local/mrtg-2/bin/indexmaker \
    --columns=2 \
    --width=350 \
    --height=95 \
    --sort=title \
    --output=/usr/local/apache2/htdocs/mrtg/index.html \
    /usr/local/mrtg-2/conf/mrtg.cfg

この中で、--widthがグラフの横幅のサイズを、--heightがグラフの縦のサイズをピクセルで指定しています。

なお、--columnsはグラフを横にいくつ並べるかという指定ですが、デフォルトで2つになっています。また--outputを指定することで、出力先を標準出力からここで指定したパスに変えられます。

図4 グラフを小さくし、バランスよく画面に収まるようにしたページ
図4 グラフを小さくし、バランスよく画面に収まるようにしたページ

ところで、グラフのサイズを小さくした場合、IE8とFirefox 3.0.7ではきれいにグラフが表示されましたが、IE7やIE6では画像がややくずれ、見にくくなってしまいました。グラフサイズを変更する場合には、クライアントPCのブラウザはIE8やFirefoxにする必要がありそうです。

もし、IE7などを使わなければならない場合には、グラフサイズを変更せず、--columns=1を指定して、縦1列に表示する方が、見栄えもよく、使い勝手は良くなると思います。

図5 IE7で崩れてしまったグラフ
図5 IE7で崩れてしまったグラフ
図6 グラフを一列にしたページ
図6 グラフを一列にしたページ

MRTGの弱点とその解決方法

今回のindexmakerで、一応のMRTGの基本的な使い方は一通り見たことになります。しかし、監視対象機器が増えてくると、これまでやってきた設定方法では、CPU負荷が高くなり、パフォーマンス的に追いつかなくなってしまいます。

実のところ、MRTGを作成したTobias氏も、よりパフォーマンスの高いMRTGの運用を実現するべく、rrdtoolというデータ管理ツールを提供しています。

そこで次回からは、このrrdtoolを使ったMRTGの使い方をご紹介していきます。

おすすめ記事

記事・ニュース一覧