ちょっとADSI系のソースで悩んでいまして・・・ちょっと息抜きで、SNMPで取得出来たらいいなぁ~と昔から思っているRTX系ルーターのセッションカウントをSystemAnswerG2で強引にグラフ化するというのをやってみました。
取得できたグラフはこんな感じ~[E:happy02]
途中途切れているのはちょっとしくじってエラー中のやつだったりします。1分間隔での取得なんで、1分毎にログインしてコマンド叩いてログアウトしてと言うのをやっているので、チョーナンセンスです(笑)。でもグラフに見えるのって気持ちいいなぁ・・・[E:happy01]
ちょっとグラフにしただけでこれだけ数値が変動しているのが判るんですからね。その都度コマンド叩いて眺めていても実感湧かないすからね。
で、そもそもルーターの情報で欲しい情報といえば、CPU、トラフィック、そしてセッション数ですね。あとは人によってはフィルタのpass/rejectカウントとか欲しいかもしれませんが、昨今はトラフィック量の増加はもとよりセッション数の増加の方が悩ましく、トラフィック量がたいしたことが無くても、ふんづまりを見るには僕ら(?)としてはセッション数が大事になってきますです。つまりトラフィックとセッション数は比例しないということっすね。
RTX系もセッション数が見られないというわけではないんです。コマンドでいつだったか対応されましたし、RTX1210ではGUIからセッション数が確認できます。
ちなみにRTXではセッション数という表現よりはNATデスクリプタの使用数ですかね。
なのでコマンドだと以下の様になります。
RTX1200> show nat descriptor masquerade port summary
Interface Desc Num Outer Address Used / All
------------------- ---------- --------------------------- -----------
LAN2(1) 1000 primary/xxx.xxx.xxx.xxx 1490/20000
------------------- ---------- --------------------------- -----------
RTX1200>
こんな感じです。
(しつこいようですが)この値がSNMPで見られるとウレシーのに対応されないんですよね。何か事情があるのかしら。
で、すでにグラフでの取得図を見せておりますが、全く持って推奨しない方法ではありますので参考程度ですが、LinuxのExpectを使って値をとにかく取り出しちゃう作戦です。
expectについてはググってもらうとして、シェルのサンプルは以下の通り。
### rtxnat.sh ###
#!/usr/bin/expect
spawn telnet $argv
expect "Password:"
send "\r"
expect "Username:"
send "ユーザー名\r"
expect "Password:"
send "パスワード\r"
expect ">"
send "show nat descriptor masquerade port summary\r"
expect ">"
send "exit\r"
close
これがとりあえず、勝手にログインして勝手にコマンドを打ち込むシェルです。いたってシンプルですね。
で、これだとSystemAnswerG2にまだ取り込めませんので、取り込むためのスクリプトを書きます。
### rtxnat.pl ###
#!/usr/bin/perl -w
#use strict;
#use warnings;
#use Switch;
use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
main();
exit;
sub show_help {
my $help_doc;
$help_doc ="Usage:\n";
$help_doc.="-H or --host 監視対象ホストを指定。\n";
$help_doc.="-h or --help ヘルプを表示します。\n";
return $help_doc;
}
sub main {
#初期値設定
my %opts = (
host => '',
help => '');
#Option処理
if(scalar @ARGV<1) {
die show_help();
}
GetOptions(\%opts, qw(
host|H=s
help|h
));
#ヘルプメッセージ表示
if($opts{help}) {
print &show_help();
exit 0;
}
open (RTXNAT, "/sa/libexec/rtxnat.sh $opts{host} | grep LAN2 | cut -c 62-67|");
while (<RTXNAT>) {
/(\d+)/ && ($natmas = $1);
};
close (RTXNAT);
print "value=".$natmas.";" ;
}
こんなかんじでエラーチェックもしてないし適当で(cutのとことかw)、かなり荒いですが、SystemAnswerG2は「value=数字;」と言うのさえ守ってやればOKです。変であれば普通に嫌がってエラー吐くだけなので、動けばOKです(ぇ。
ちなみに2つのファイルはSAエンジン(monitor)サーバー「/sa/libexec」の中に置いておくです。
RTXのファームやコマンドの対応機種にもよりますが、汎用性とオプションのわずらわしさも無くして、シンプルにしました。オプションパラメータとして必要になるのは、インターフェースですかね。NATはLAN2を使っているのかLAN3なのかとか。
問題点としては、今回Expectでユーザー名/パスワードによるログインにしていますが、RTXはユーザー名なしでログイン出来るのが普通でした。もちろんどちらの方法でも行けるのですが、ユーザー名無しの方でログインをしておくと、何故かユーザー名ログインのほうが上手くログイン出来ません・・・。そーいう仕様だったかな?詳しく調べていないので、とりあえずすぐには困らないので、しばらくグラフの観察しときましょ。
とりあえず、とにかく、おすすめする手段ではありません。ただ、私の様に、最近なーんかネットの接続が重たいように感じるんだよなぁ・・・とか思った時に見るのはアリかもということで。
やるまいと思っていたのにやってしまった・・・orz