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

第8回 indexmakerを使う

この記事を読むのに必要な時間:およそ 2.5 分

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 正しく日本語が表示された画面

著者プロフィール

田村吉章(たむらよしあき)

1962年群馬県生まれ。東京理科大学理工学部数学科卒。専門は数値解析。85年から金融機関に勤務。システム開発部門,有価証券のリスク管理部門を経た後,システム監査に従事。公認情報システム監査人(CISA)。主な業務に社内ネットワークの企画・構築の他,有価証券のプライスモデルの実装やValue at Risk(VaR)算出などを行う市場リスク管理システムの構築などがある。

コメント

コメントの記入