G-240W-B の Munin プラグイン

自宅の光通信化により、新しいルータが入ったが、パケット流量測定の ための Munin プラグインを作成してみた。

ルータのデータ取得のため、ルータの「LAN状態」のページのHTMLを観察しながら、 Cookieによるセッションを扱いながらパケット流量のデータを取るPerlスクリプトを記述。 Perl でのセッションをまたがったデータ取得プログラムのいい練習になったかな。

ルータからは、Packets* と Bytes* が取得できるけど、 Bytes だと、Muninの測定周期5分で、簡単に 2^32 を超えちゃうようで、 使い物にならないみたい。BPS が直感的だから、Bytes...に変更したけど、 すぐに元に戻す。

#!/usr/bin/perl

 #%# family=auto
 #%# capabilities=autoconf

use LWP::UserAgent ;
use HTTP::Cookies ;

# ルータ情報
my $router = "http://192.168.1.254" ;
my $auth = [ 'name' => "userAdmin" ,
             'pswd' => "xxxxxxxxxxxx" ] ;

# Munin のグラフ情報の設定用処理
if ( defined($ARGV[0]) and $ARGV[0] eq "config" ) {

    # グラフの基本情報
    print "graph_title FTTH GPON network statics\n" ;
    print "graph_category network\n" ;
    print "graph_vlabel packet/sec (-)send / (+)recv\n" ;
    print "graph_args --base 1024\n" ;
    print "graph_printf %4.1lf\n" ;
    
    # LAN1..LAN4
    for( my $i = 1 ; $i <= 4 ; $i++ ) {
        foreach my $sr ( "Sent" , "Received" ) {

            print "LAN$i$sr.label LAN$i pkt\n" ;
            print "LAN$i$sr.type COUNTER\n" ;
            if ( $sr eq "Sent" ) {
                print "LAN$i$sr.graph no\n" ;
            } else {
                print "LAN$i$sr.draw LINE2\n" ;
                print "LAN$i$sr.negative LAN${i}Sent\n" ;
            }
            print "LAN$i$sr.max 1000000\n" ;
        }
    }
    exit 0 ;
}

# ルータに login
my $ua = LWP::UserAgent->new ;
my $cookie = new HTTP::Cookies() ;
$ua->cookie_jar( $cookie ) ;
my $res = $ua->post( "$router/login.cgi" , $auth ) ;

if ( $res->is_redirect ) {
    # LAN情報を取得
    $res = $ua->get( "$router/lan_status.cgi?lan" ) ;
    my $flag = 0 ;
    my $lan_id = 0 ;
    foreach my $line( split( /\n/ , $res->content ) ) {
        if ( $line =~ /^\s+var\s+lan_ether=/ ) {
            # "var lan_ether="を探す
            $flag = 1 ;
        } elsif ( $flag && $line =~ /^(|,)(\d+):\{/ ) {
            # LAN番号を取得
            $lan_id = $2 ;
        } elsif ( $flag && $line =~ /^Packets(Sent|Received):(\d+),$/ ) {
            # PacketsSent / PacketsReceived
            print "LAN$lan_id$1.value $2\n" ;
        } elsif ( $flag && $line =~ /^;$/ ) {
            last ;
        }
    }
}
 

2017年2月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        

ウェブページ

アーカイブ

Webデータ

このブログ記事について

このページは、T-Saitohが2016年5月 5日 22:56に書いたブログ記事です。

ひとつ前のブログ記事は「おはようございます~♪」です。

次のブログ記事は「@TohruSaitohのつぶやき(05/03)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。