最終更新日: 2010-03-31
netstatでMRTGでは、 netstat(8) コマンドが出力するインターフェイスの統計情報から トラフィック量をMRTGで可視化するためのスクリプトを解説しました。 この方法が使えるのは、 netstatコマンドが送受信バイト数をレポートしてくれる場合です。
Linux系のネットワークの実装では、 ifconfig(8) コマンドで簡単にインターフェイスの統計情報が利用できます。 そのような場合はこのページで紹介するスクリプトを使ってください。 たとえば、適当なLinuxマシン (ここでは、Ubuntu 9.04 on 工人舎PM + Corega FEther USB-TXC) でifconfigコマンドを実行すると、以下のような結果が得られます。
$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0a:bc:aa:bb:cc inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::20a:bcff:feaa:bbcc/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1267 errors:0 dropped:0 overruns:0 frame:0 TX packets:744 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1547002 (1.5 MB) TX bytes:63890 (63.8 KB)
というわけで、次のようなシェルスクリプトを (たとえば/usr/local/libexec/mrtg-ifconfig.shというファイルで) 用意して、
#! /bin/sh export LANG=C export PATH=${PATH}:/sbin temp=/tmp/ifconfig-bytes.$$ trap 'rm -f $temp*; exit 1' 1 2 15 # clean up files case x$# in x0) interface="eth0" ;; *) interface="$1" ;; esac ifconfig $interface | grep 'RX bytes' | tr ':' ' ' | head -1 > $temp.1 ibytes=`cat $temp.1 | awk '{print $3}'` obytes=`cat $temp.1 | awk '{print $8}'` echo $ibytes echo $obytes cat $temp.1 echo "$interface" rm -f $temp* exit 0 # EOFmrtg.cfgから次のように呼び出すと、
Target[eth0]: `/bin/sh /usr/local/libexec/mrtg-ifconfig.sh eth0`引数で指定したインターフェイス(ここではeth0)の トラフィックをMRTGでグラフ化できますね。 同じくifconfigコマンドが出力する「パケット数」を可視化するなら、
#! /bin/sh export LANG=C export PATH=${PATH}:/sbin temp=/tmp/ifconfig-packet.$$ trap 'rm -f $temp*; exit 1' 1 2 15 # clean up files case x$# in x0) interface="eth0" ;; *) interface="$1" ;; esac ifconfig $interface | grep 'RX packets' | tr ':' ' ' | head -1 > $temp.2 ifconfig $interface | grep 'TX packets' | tr ':' ' ' | head -1 > $temp.3 ibytes=`cat $temp.2 | awk '{print $3}'` obytes=`cat $temp.3 | awk '{print $3}'` echo $ibytes echo $obytes echo RX packets $ibytes, TX packets $obytes echo "$interface" rm -f $temp* exit 0 # EOFこんなのもいいかもしれませんね。
…工人舎PMでMRTGを使って、 トラフィックを可視化する意味があるのかどうかは別問題です。