Nozbe
Google

« CentOSでFFFTPから削除できない | メイン | モバイル対応とAdsenseの実験 »


トップページ > コンピュータ > UNIX系 > RT57iのトラフィック状況をMRTGで監視

2009年07月08日

RT57iのトラフィック状況をMRTGで監視

職場で使っているYAMAHA RT57iというルーターでVPNの動作が不安定というか、速度が速い時と遅い時があるという話になった。そこでルーターの転送速度というかパケットの状態を監視したいなと言うことになった。

調べてみたら、TELNETでRT57iに入り、状態を表示するコマンドをPerlスクリプトを使って定期的に行い情報を収集、それをMRTGでグラフ表示する方法がみつかった。

おまかせブログ::RT57iのトラフィック状況をMRTGに

こちらを参考にさせてもらいながら行うことにした。
MRTGはCentOS5.2で動いているDELLのT105というサーバーで行うことにした。

まず、MRTGをインストールすることからはじめた。

# yum install mrtg

設定ファイルは、/etc/mrtg.mrtg.cfgとなるみたいだ。
実行ファイル本体はwhichコマンドでありかを調べられる。

# which mrtg
/usr/bin/mrtg

上記サイトを参考にさせていただき、rt57i.plを作成し/etc/mrtg/に配置する。

/etc/mrtg/mrtg.cfgは下記のようにした。

# Minimal mrtg.cfg
#--------------------

HtmlDir: /var/www/html/mrtg
ImageDir: /var/www/html/mrtg
LogDir: /var/lib/mrtg
ThreshDir: /var/lib/mrtg
#Target[r1]: 2:public@myrouter.somplace.edu
#MaxBytes[r1]: 1250000
#Title[r1]: Traffic Analysis
#PageTop[r1]: <h1>Stats for our Ethernet</h1>

## RT57i ##
Target[rt57i]: `/etc/mrtg/rt57i.pl`
MaxBytes[rt57i]: 1000000
Title[rt57i]: Traffic Analysis for RT57i
Options[rt57i]: growright, integer
kilo[rt57i]: 1024
YLegend[rt57i]: Byte/sec
ShortLegend[rt57i]: byte/sec
LegendI[rt57i]: 受信
LegendO[rt57i]: 送信
PageTop[rt57i]: <h1>YAMAHA RT57i</h1>

早速実行してみたがエラー続出・・・
まず、Perlのライブラリが無かったみたい。CPANでインストール

# cpan cpan> install Net::Telnet

次もやっぱり・・

Wednesday, 8 July 2009 at 11:31: ERROR: Target[rt57i][_IN_] ' $target->[0]{$mode} ' did not eval into defined data
Wednesday, 8 July 2009 at 11:31: ERROR: Target[rt57i][_OUT_] ' $target->[0]{$mode} ' did not eval into defined data

なんだかんだ不具合をつぶしていく。

env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg

エラーが出なくなり、Apacheの公開ディレクトリにhtmlとpngファイルが生成された。
しかし、値がゼロらしくなんにもグラフに出てこない。

/var/lib/mrtg/rt57i.log を確認してみると中がゼロばかりだ・・・ルーターのパケット量が取れてない。
仕方ないのでPerlスクリプトの方を調べてみる。結局は「転送バイト数を取得する」部分に不備?があったので下記のように修正した。

# ルーターの名前
$routername = 'router';
# ルーターのパスワード
$passwd = 'himitsupass';
# ----------------------------------------------------------------------
# これ以降の部分はいじらないこと。
$prompt = '/>\s+/';
use Net::Telnet ();
$t = new Net::Telnet;
# RTA50iにログインする
# いきなりPassword:プロンプトが出るので、標準のlogin()メソッドが使えない

$t->open($routername);
$t->waitfor('/assword: $/');
$t->print($passwd);
$t->waitfor($prompt);
# プロンプトをセットする
$t->prompt($prompt);

# 表示を英語モードに設定
$t->cmd("console character ascii");

# 転送バイト数を取得する
@lines = $t->cmd("show status lan2");
foreach (@lines) {
if (/^Received:/) { # 受信バイト数
/(\d+) octets/;# [2000/3/21] 変更
$recv = $1;
}
if (/^Transmitted:/) { # 送信バイト数
/(\d+) octets/;# [2000/3/21] 変更
$trans = $1;
}
}

# uptimeを取得する
@lines = $t->cmd("show environment");
foreach (@lines) {
if (/Elapsed time from boot: (.+)/) {
$uptime = $1;
last;
}
}

# 結果を出力する
print $recv, "\n";
print $trans, "\n";
print $uptime, "\n";
print $routername, "\n";

上の黄色いマーカー部分は、下記の記述ではパターンマッチングがだめだったので直した。

/\[(\d+) octets?]/;

正規表現は苦手である・・・・

投稿者 sasapurin : 2009年07月08日 13:53 | UNIX系 , オープンソース系

トップページ > コンピュータ > UNIX系 > RT57iのトラフィック状況をMRTGで監視

トラックバック

このエントリーのトラックバックURL:
http://blog.sasapurin.com/mt-tb.cgi/911

このエントリーを含むはてなブックマーク

コメント

是非コメントしてください




保存しますか?