想自己画图来监控交换机的流量,第一步就是通过snmpwalk来得到交换机的进出流量:
我们用得是Cisco 3750的24口交换机,给个OID表:
先看一下交换机的端口情况:
1snmpwalk -v 2c -c xxxxxxxx 172.16.1.1 .1.3.6.1.2.1.2.2.1.2
得到一堆信息,问网络工程师得到1/0/5和2/0/5这两个端口是双上连线路:
1IF-MIB::ifDescr.10105 = STRING: GigabitEthernet1/0/5
2IF-MIB::ifDescr.10605 = STRING: GigabitEthernet2/0/5
记住两个端口的描述符,10105和10605.
继续,我们看上表,.1.3.6.1.2.1.2.2.1.10(接口收到的字节数),我们要得到某个具体端口收到的字节数,就必须加上端口的描述符了。所以要得到1/0/5的收到字节数,就是.1.3.6.1.2.1.2.2.1.10.10105
1#snmpwalk -v 2c -c xxxxxxxx 172.16.1.1 .1.3.6.1.2.1.2.2.1.10.10105
2IF-MIB::ifInOctets.10105 = Counter32: 2198534228
ok,拿到字节数了,然后单位是bytes,换算成bit(*8),然后除若干1024,得到单位m,g, t等,入库,然后调hichart画图即可。
然而,还有一个问题,看清上面的单位,Counter32,呵呵,所以这里是不对的。现如今的网络多是千兆网卡了,所以counter32是不对的, 100Mbps以上必须使用Counter64的单位,给个对照表:
高速网卡(100兆以上):
- ifHCInOctets: 1.3.6.1.2.1.31.1.1.1.6 (64-bit Octets in counter)
- ifHCOutOctets: 1.3.6.1.2.1.31.1.1.1.10 (64-bit Octets out counter)
- ifHCInUcastPkts: 1.3.6.1.2.1.31.1.1.1.7 (64-bit Packets in counter)
- ifHCOutUcastPkts: 1.3.6.1.2.1.31.1.1.1.11 (64-bit Packets out counter)
- ifHighSpeed: 1.3.6.1.2.1.31.1.1.1.15 (An estimate of the interface’s current bandwidth in units of 1Mbps)
低速网卡:
- ifInOctets: 1.3.6.1.2.1.2.2.1.10 (32-bit Octets in counter)
- ifOutOctets: 1.3.6.1.2.1.2.2.1.16 (32-bit Octets out counter)
- ifInUcastPkts: 1.3.6.1.2.1.2.2.1.11 (32-bit Packets in counter)
- ifOutUcastPkts: 1.3.6.1.2.1.2.2.1.17 (32-bit Packets out counter)
- ifSpeed: 1.3.6.1.2.1.2.2.1.5 (Currently negotiated speed of the interface - Max: 4.294 Gbps)
详细解释下:ifInOctets是32-bit无符整数,2的32次方是4,294,967,296。去掉0,所以范围是0-4,294,967,295,大概是34g的bit. 如果按网速74-92Mbps来算, 大概6分钟就会填满,92Mbps * 60seconds *6minutes = 33gigabits.所以填满是很快的,如果你正好在这期间读取数据,很有可能会读错。
所以命令应该是:
1snmpwalk -v 2c -c xxxxxxxx 172.16.1.1 1.3.6.1.2.1.31.1.1.1.6.10105
最后附上计算流量的公式:
1(ifInOctetsCurrent - ifInOctetsPrevious) * 8 / pollingSeconds