LoginSignup
5

More than 5 years have passed since last update.

CiscoルータのトラフィックをRRDtoolを使って30秒平均のグラフを作る(準備)

Last updated at Posted at 2015-11-12

目的

一般的なルータのトラフィックをグラフ化するツールは5分平均です。
スパイクなどの一瞬のトラフィック増減を把握するために、30秒平均でグラフ化します。
トラフィックのグラフ化にはRRDtoolを利用します。

この記事ではRRDtoolの使い方を確認するために、コマンドで実行する方法について記載します。

Ciscoルータとsnmpについては、Ciscoルータのポート一覧をSNMPで取得するで記載しています。

実行イメージ

下記のようにパケットデータ量とパケット数を30秒平均のグラフにします。
ここでは、サンプルデータとしてサインカーブを保存し、RRDtoolで描画しています。

送受信トラフィック(転送データ量) ※正方向は受信、負方向は送信
286ec4c0-4233-4460-b8ca-2a0393e5edb3-traffic.png

送受信パケット数 ※正方向は受信、負方向は送信
286ec4c0-4233-4460-b8ca-2a0393e5edb3-packet.png

収集対象のSNMP OID

下記のOIDを定期的にsnmpgetで取得して、RRDファイルに保存します。

  • トラフィック
    • 受信: ifHCInOctets
    • 送信: ifHCOutOctets
  • ユニキャストパケット数
    • 受信: ifHCInUcastPkts
    • 送信: ifHCOutUcastPkts
  • マルチキャストパケット数
    • 受信: ifHCInMulticastPkts
    • 送信: ifHCOutMulticastPkts
  • ブロードキャストパケット数
    • 受信: ifHCInBroadcastPkts
    • 送信: ifHCOutBroadcastPkts

RRDtoolコマンド

対象

今回はCisco1812JルータのFastEthernet0のインタフェースを取得対象とする。
下記のsnmpwalkの実行結果から、インデックス番号は1と確認できる。

snmpwalk
% 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ヶ月間、ルータの各カウンタを保存できるようにします。

create
# 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でトラフィックを取得して、更新します。

update
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に、前日〜本日までの範囲指定をしています。

トラフィック

graph
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"

パケット数

graph
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"

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5