MRTGによるADSL監視(Linux編)


MRTGは、ルータ等のトラヒックをグラフで表示するツールです。おやじ宅は、フェライトコア等で対策した結果、速度は出ないものの工事以外ではまず切れなくなったのでほとんど意味が無いのですが、このツールとCRONを使って、おやじ宅のADSLモデム(住友電工製 TE4121C)のADSL回線のリンク速度とトラヒックをリアルタイムに表示させてみました。

2002.12.28に来年のBフレッツ・マンションタイプへの乗り換えに備え、ルータが必要になるのでNTT-ME BA8000 Proを購入しました。開通時に接続替えだけで移行できるように、TE4121CはブリッジモードにしBA8000 ProでPPPoEを終端させました。このため、TE4121Cにアクセスできなくなったので、下記のグラフは停止したままになっています。

  ・当サイトのADSL回線のリンク速度     ・当サイトのADSL回線のトラヒック

スクリプトの中で、pingによりADSLモデムが生きているか見ていますが、pingを動作させると、「Warning: time of day goes back, taking countermeasures.」というエラーメッセージが出力されます。CRONで5分毎にこのスクリプトが動作しますので、1日で288通ものroot宛メールが届いていました。いろいろ調査した結果、RedHat 7.2はkernel 2.4.7-10ですが、RedHatのHPにある最新のkernel 2.4.9-31(i386ではなくi686)にあげることによりこの問題は解決します。同様の問題でお悩みの方はトライしてみるといいでしょう。kernelを上げることによる弊害はおやじはわかりませんので、各人の判断で行ってください。

■必要なファイルやスクリプトの準備

おやじがスクリプトを書ける訳はありません。おやじは、tetsuosさんの作成された設定ファイルとスクリプトを使用させてもらいました。但し、素直に動いた訳ではありません。若干気をつけなければならない点がありましたので、それは下記に示します。
  1. 下記から、設定ファイルとスクリプトを入手します。

    ● 設定ファイル

         http://www.zephyr.dti.ne.jp/~tetsuos/adsl/adslmon.cfg

    ● スクリプト

       ・リンク速度監視用

         http://www.zephyr.dti.ne.jp/~tetsuos/adsl/TE4121C_linkup.pl

       ・traffic監視用

         http://www.zephyr.dti.ne.jp/~tetsuos/adsl/TE4121C_traffic.pl

  2. 設定ファイル(adslmon.cfg)の変更

    設定ファイルの内容をおやじの環境に合わせて、以下のように変更し/usr/local/bin/adsl/adslmon.cfgに置きました。は変更、は追加したものです。


    # mrtg2: TE4121C 用 設定ファイル       v0.2
    #

    # --------------------------------------------------------------------
    #WorkDir: /var/adsl/TE4121C
    # html ファイルをおくディレクトリを指定して下さい 

    #  これらのディレクトリはあらかじめ作成しておいて下さい
    #  例: mkdir -p /home/oyaji/public_html/adsl/{images,icons}
    #      cp mrtgのiconのディレクトリ/*.png /home/oyaji/public_html/adsl/icons

    Htmldir:  /home/oyaji/public_html/adsl
    Imagedir: /home/oyaji/public_html/adsl/images
    IconDir:  icons

    # ログファイルをおくディレクトリを指定して下さい
    #  例: mkdir -p /usr/local/bin/adsl/logs
    Logdir:   /usr/local/bin/adsl/logs

    Refresh: 300
    Language: eucjp

    # --------------------------------------------------------------------
    #    TE4121C Traffic Information
    # --------------------------------------------------------------------

    #  --- Target に TE4121C_traffic.pl のあるパスを指定して下さい
    #                                       バックティック (`) は必要
    Target[TE4121C_traffic]: `perl /usr/local/bin/adsl/TE4121C_traffic.pl`
    #      --- MaxBytes を各自の場合にあわせて下さい
    MaxBytes[TE4121C_traffic]: 250000
    Options[TE4121C_traffic]:  growright, integer, nopercent, noinfo
    # Unscaled[TE4121C_traffic]: dwym
    YLegend[TE4121C_traffic]: Byte/sec
    ShortLegend[TE4121C_traffic]: byte/sec&nbsp
    kilo[TE4121C_traffic]: 1024
    # kMG[TE4121C_traffic]: ,k,M,G,T,P
    LegendI[TE4121C_traffic]: 受信
    LegendO[TE4121C_traffic]: 送信
    Title[TE4121C_traffic]: TE4121C Traffic
    PageTop[TE4121C_traffic]: <H1>TE4121C Traffic</H1>

    # --------------------------------------------------------------------
    # TE4121C Link-up Speed Information
    # --------------------------------------------------------------------

    #   --- Target に TE4121C_linkup.pl のあるパスを指定して下さい
    #                                       バックティック (`) は必要
    Target[TE4121C_linkup]: `perl /usr/local/bin/adsl/TE4121C_linkup.pl`
    #   --- MaxBytes を各自の場合にあわせて下さい
    MaxBytes[TE4121C_linkup]: 2000
    #   --- noinfo を取り除くと ADSL IP が表示されます
    Options[TE4121C_linkup]: growright, gauge, integer, nopercent, noinfo
    Unscaled[TE4121C_linkup]: dwmy
    ShortLegend[TE4121C_linkup]: kbps&nbsp
    # kilo[TE4121C_linkup]: 1024
    kMG[TE4121C_linkup]: ,M,G,T,P
    YLegend[TE4121C_linkup]: Mbps
    LegendI[TE4121C_linkup]: 上り
    LegendO[TE4121C_linkup]: 下り
    Title[TE4121C_linkup]: TE4121C Link-up Speed
    PageTop[TE4121C_linkup]: <H1>TE4121C Link-up Speed</H1>

    ■ディレクトリの変更
       各ディレクトリは、適宜変更してください。但し、MRTGの条件から、ImagedirはHtmldir配下に置かなければなりません。

    ■Targetの変更
       各ディレクトリ指定の先頭に、”perl "を追加します。本来は、不要と思われますが、おやじの環境では、perlを明示しないとうまく実行されませんでした。具体的には、モデムからのデータ取得ができず、logに ”1”しか記録されませんでした。

    ■MaxBytesの変更
       おやじは、残念ながら1.6Mbps前後でしかリンクしないため、2Mbpsを上限として、設定しました。リンク速度はkbps単位で、トラヒックはリンク速度を8で割ったbyte単位で指定します。

    ■データの保存
       設定ファイルを /usr/local/bin/adsl(どこでもよい)に保存します。ここで、少し注意しなければならないことがあります。設定ファイルのLanguageにあるように、MRTGが扱える日本語環境はEUC_JPであり、Shift-JISは扱えません。Windows環境で編集する場合、エディタの漢字コードをEUCにすることを忘れないようにしてください。また、FTP転送時の設定も同様です。Shift-JISだと、グラフ下の日本語表示がおかしくなってしまいます。おやじは、少しはまりました。

  3. スクリプトの変更

    両スクリプトとも修正個所は、下記の2〜3個所のみです。但し、冒頭のperlへのパスは一応確認してください。

        $mgurl    = "192.168.1.1";   ←モデムのアドレス
        $mgcgi    = "cgi-bin/main.cgi?cc_webname=STATUS";
        $mguserid = "user";   ←−−−モデムのログインユーザ名
        $mgpasswd = "user";  ←−−−モデムのログインパスワード

■MRTGの起動

では、動かしてみましょう。以下のようにコマンドを入力してmrtgを起動すると、htmlファイルができあがり、 logファイルにデータが収集されているはずです。少し時間をおきながら、数度実行してみます。logファイルにデータが収集されない、あるいは0または1等が収集される場合は、上記のとおり設定されているか(アドレス・ユーザ名・パスワード等)確認する他、perlへのパスが間違っていないか確認してください。

/usr/bin/mrtg /usr/local/bin/adsl/adslmon.cfg
RedHat 7.2では、/usr/bin/mrtgにありますので、ここから起動します。
問題なく動作することが確認できたら、MRTGを周期的(5分毎)に起動できるようにします。デーモンでも起動できるようですが、スクリプトをかかなければならないようなのでおやじには敷居が高いので、一番てっとり早いcronで動かす方法にしました。Redhat 7.2ではデフォルトで起動していますので、/etc/crontabに以下のように追加し、crondを再起動すればいいでしょう。
# mrtg by crond
#0-59/5 * * * * root /usr/local/mrtg-2/mrtg /usr/local/bin/adsl/adslmon.cfg
0-59/5 * * * * root /usr/bin/mrtg /usr/local/bin/adsl/adslmon.cfg

 

Top Pageへ   Windows編