Network Users' Group ``wheel'' / Dai ISHIJIMA's Page /
RTA55i / ifconfigでMRTG
wgetでMRTGその2netstatで
拒否パケットをSNMPを使わずにapacheのログを

最終更新日: 2010-03-31


ifconfigでMRTG

Linux系OSの場合

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

	# EOF
mrtg.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を使って、 トラフィックを可視化する意味があるのかどうかは別問題です。


ご質問などありましたらお気軽に