目的
一般的なルータのトラフィックをグラフ化するツールは5分平均です。
スパイクなどの一瞬のトラフィック増減を把握するために、30秒平均でグラフ化します。
トラフィックのグラフ化にはRRDtoolを利用します。
この記事ではRRDtoolの使い方を確認するために、コマンドで実行する方法について記載します。
Ciscoルータとsnmp
については、Ciscoルータのポート一覧をSNMPで取得するで記載しています。
実行イメージ
下記のようにパケットデータ量とパケット数を30秒平均のグラフにします。
ここでは、サンプルデータとしてサインカーブを保存し、RRDtoolで描画しています。
送受信トラフィック(転送データ量) ※正方向は受信、負方向は送信
収集対象のSNMP OID
下記のOIDを定期的にsnmpget
で取得して、RRDファイルに保存します。
- トラフィック
- 受信: ifHCInOctets
- 送信: ifHCOutOctets
- ユニキャストパケット数
- 受信: ifHCInUcastPkts
- 送信: ifHCOutUcastPkts
- マルチキャストパケット数
- 受信: ifHCInMulticastPkts
- 送信: ifHCOutMulticastPkts
- ブロードキャストパケット数
- 受信: ifHCInBroadcastPkts
- 送信: ifHCOutBroadcastPkts
RRDtoolコマンド
対象
今回はCisco1812JルータのFastEthernet0のインタフェースを取得対象とする。
下記のsnmpwalk
の実行結果から、インデックス番号は1
と確認できる。
% snmpwalk -v2c -c public 192.168.88.101 ifDescr
IF-MIB::ifDescr.1 = STRING: FastEthernet0
IF-MIB::ifDescr.2 = STRING: FastEthernet1
IF-MIB::ifDescr.3 = STRING: BRI0
IF-MIB::ifDescr.4 = STRING: BRI0:1
IF-MIB::ifDescr.5 = STRING: BRI0:2
IF-MIB::ifDescr.6 = STRING: FastEthernet2
IF-MIB::ifDescr.7 = STRING: FastEthernet3
IF-MIB::ifDescr.8 = STRING: FastEthernet4
IF-MIB::ifDescr.9 = STRING: FastEthernet5
IF-MIB::ifDescr.10 = STRING: FastEthernet6
IF-MIB::ifDescr.11 = STRING: FastEthernet7
IF-MIB::ifDescr.12 = STRING: FastEthernet8
IF-MIB::ifDescr.13 = STRING: FastEthernet9
IF-MIB::ifDescr.14 = STRING: Null0
IF-MIB::ifDescr.15 = STRING: Vlan1
IF-MIB::ifDescr.16 = STRING: BRI0-Physical
IF-MIB::ifDescr.17 = STRING: BRI0-Signaling
IF-MIB::ifDescr.18 = STRING: BRI0:1-Bearer Channel
IF-MIB::ifDescr.19 = STRING: BRI0:2-Bearer Channel
作成
RRD形式のデータベースを作成します。ファイル名はUUIDをつけました。
30秒間隔で1ヶ月間、ルータの各カウンタを保存できるようにします。
# 1447167590 => 2015-11-10 23:59:90 +0900
# 1447167600 => 2015-11-11 00:00:00 +0900
rrdtool create 286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd \
--start 1447167590 \
--step 30 \
DS:InOctets:COUNTER:120:0:U \
DS:OutOctets:COUNTER:120:0:U \
DS:InUcastPkts:COUNTER:120:0:U \
DS:OutUcastPkts:COUNTER:120:0:U \
DS:InMulticastPkts:COUNTER:120:0:U \
DS:OutMulticastPkts:COUNTER:120:0:U \
DS:InBroadcastPkts:COUNTER:120:0:U \
DS:OutBroadcastPkts:COUNTER:120:0:U \
RRA:MAX:0.5:1:86400
更新
watchコマンドで30秒毎にsnmpgetでトラフィックを取得して、更新します。
watch -n 30 rrdtool update 286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd N:\
`snmpget -v2c -Oqv -c public 192.168.88.101 ifHCInOctets.1`:\
`snmpget -v2c -Oqv -c public 192.168.88.101 ifHCOutOctets.1`:\
`snmpget -v2c -Oqv -c public 192.168.88.101 ifHCInUcastPkts.1`:\
`snmpget -v2c -Oqv -c public 192.168.88.101 ifHCOutUcastPkts.1`:\
`snmpget -v2c -Oqv -c public 192.168.88.101 ifHCInMulticastPkts.1`:\
`snmpget -v2c -Oqv -c public 192.168.88.101 ifHCOutMulticastPkts.1`:\
`snmpget -v2c -Oqv -c public 192.168.88.101 ifHCInBroadcastPkts.1`:\
`snmpget -v2c -Oqv -c public 192.168.88.101 ifHCOutBroadcastPkts.1`
描画
トラフィックとパケット数のグラフを別々に描画します。
受信方向をグラフの正の領域に、送信方向をグラフの負の領域に描画します。
startとendに、前日〜本日までの範囲指定をしています。
トラフィック
rrdtool graph 286ec4c0-4233-4460-b8ca-2a0393e5edb3-traffic.png \
--start -1day \
--end start+1day \
--title "R1 Fa0 - Traffic" \
--width 800 \
--height 200 \
--slope-mode \
--rigid \
--vertical-label "bits per second (bps)" \
"DEF:a=286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd:InOctets:MAX" \
"DEF:b=286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd:OutOctets:MAX" \
"CDEF:bita=a,8,*" \
"CDEF:bitb=b,8,*,-1,*" \
"VDEF:maxa=bita,MAXIMUM" \
"VDEF:maxb=bitb,MINIMUM" \
"VDEF:avga=bita,AVERAGE" \
"VDEF:avgb=bitb,AVERAGE" \
"VDEF:lsta=bita,LAST" \
"VDEF:lstb=bitb,LAST" \
"HRULE:0#888888" \
"AREA:bita#54EC48:Inbound " \
"LINE1:bita#24BC14" \
"GPRINT:avga:Average\\:%8.1lf %sbps" \
"GPRINT:maxa:Maximum\\:%8.1lf %sbps" \
"GPRINT:lsta:Current\\:%8.1lf %sbps\\n" \
"AREA:bitb#48C4EC:Outbound" \
"LINE1:bitb#1598C3" \
"GPRINT:avgb:Average\\:%8.1lf %sbps" \
"GPRINT:maxb:Maximum\\:%8.1lf %sbps" \
"GPRINT:lstb:Current\\:%8.1lf %sbps\\n"
パケット数
rrdtool graph 286ec4c0-4233-4460-b8ca-2a0393e5edb3-packet.png \
--start \
--start -1day \
--end start+1day \
--title "R1 Fa0 - Packets" \
--width 800 \
--height 200 \
--slope-mode \
--rigid \
--vertical-label "packets per second (pps)" \
"DEF:a=286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd:InUcastPkts:MAX" \
"DEF:b=286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd:OutUcastPkts:MAX" \
"DEF:c=286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd:InMulticastPkts:MAX" \
"DEF:d=286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd:OutMulticastPkts:MAX" \
"DEF:e=286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd:InBroadcastPkts:MAX" \
"DEF:f=286ec4c0-4233-4460-b8ca-2a0393e5edb3.rrd:OutBroadcastPkts:MAX" \
"CDEF:bita=a" \
"CDEF:bitb=b,-1,*" \
"CDEF:bitc=c" \
"CDEF:bitd=d,-1,*" \
"CDEF:bite=e" \
"CDEF:bitf=f,-1,*" \
"CDEF:ace=bita,bitc,+,bite,+" \
"CDEF:bdf=bitb,bitd,+,bitf,+" \
"VDEF:maxa=bita,MAXIMUM" \
"VDEF:maxb=bitb,MINIMUM" \
"VDEF:maxc=bitc,MAXIMUM" \
"VDEF:maxd=bitd,MINIMUM" \
"VDEF:maxe=bite,MAXIMUM" \
"VDEF:maxf=bitf,MINIMUM" \
"VDEF:maxace=ace,MAXIMUM" \
"VDEF:maxbdf=bdf,MINIMUM" \
"VDEF:avga=bita,AVERAGE" \
"VDEF:avgb=bitb,AVERAGE" \
"VDEF:avgc=bitc,AVERAGE" \
"VDEF:avgd=bitd,AVERAGE" \
"VDEF:avge=bite,AVERAGE" \
"VDEF:avgf=bitf,AVERAGE" \
"VDEF:avgace=ace,AVERAGE" \
"VDEF:avgbdf=bdf,AVERAGE" \
"VDEF:lsta=bita,LAST" \
"VDEF:lstb=bitb,LAST" \
"VDEF:lstc=bitc,LAST" \
"VDEF:lstd=bitd,LAST" \
"VDEF:lste=bite,LAST" \
"VDEF:lstf=bitf,LAST" \
"VDEF:lstace=ace,LAST" \
"VDEF:lstbdf=bdf,LAST" \
"HRULE:0#888888" \
\
"AREA:bita#54EC48:Unicast Packets In " \
"GPRINT:avga:Average\\:%8.1lf %spps" \
"GPRINT:maxa:Maximum\\:%8.1lf %spps" \
"GPRINT:lsta:Current\\:%8.1lf %spps\\n" \
"AREA:bitc#7648EC:Multicast Packets In :STACK" \
"GPRINT:avgc:Average\\:%8.1lf %spps" \
"GPRINT:maxc:Maximum\\:%8.1lf %spps" \
"GPRINT:lstc:Current\\:%8.1lf %spps\\n" \
"AREA:bite#DE48EC:Broadcast Packets In :STACK" \
"GPRINT:avgc:Average\\:%8.1lf %spps" \
"GPRINT:maxc:Maximum\\:%8.1lf %spps" \
"GPRINT:lstc:Current\\:%8.1lf %spps\\n" \
"LINE1:bita#24BC14" \
"LINE1:bitc#4D18E4::STACK" \
"LINE1:bite#B415C7::STACK" \
"COMMENT: Total Packets In " \
"GPRINT:avgace:Average\\:%8.1lf %spps" \
"GPRINT:maxace:Maximum\\:%8.1lf %spps" \
"GPRINT:lstace:Current\\:%8.1lf %spps\\n" \
"COMMENT: \\n" \
\
"AREA:bitb#48C4EC:Unicast Packets Out" \
"GPRINT:avgb:Average\\:%8.1lf %spps" \
"GPRINT:maxb:Maximum\\:%8.1lf %spps" \
"GPRINT:lstb:Current\\:%8.1lf %spps\\n" \
"AREA:bitd#EA644A:Multicast Packets Out:STACK" \
"GPRINT:avgd:Average\\:%8.1lf %spps" \
"GPRINT:maxd:Maximum\\:%8.1lf %spps" \
"GPRINT:lstd:Current\\:%8.1lf %spps\\n" \
"AREA:bitf#EC9D48:Broadcast Packets Out:STACK" \
"GPRINT:avgf:Average\\:%8.1lf %spps" \
"GPRINT:maxf:Maximum\\:%8.1lf %spps" \
"GPRINT:lstf:Current\\:%8.1lf %spps\\n" \
"LINE1:bitb#1598C3" \
"LINE1:bitd#CC3118::STACK" \
"LINE1:bitf#CC7016::STACK" \
"COMMENT: Total Packets Out" \
"GPRINT:avgbdf:Average\\:%8.1lf %spps" \
"GPRINT:maxbdf:Maximum\\:%8.1lf %spps" \
"GPRINT:lstbdf:Current\\:%8.1lf %spps\\n"