SNMP OID来监控网络设备流量

想自己画图来监控交换机的流量,第一步就是通过snmpwalk来得到交换机的进出流量:

我们用得是Cisco 3750的24口交换机,给个OID表:

image-20240108142515825

先看一下交换机的端口情况:

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

Linux下配置Modem拨号
Linux下设置LANG变量
comments powered by Disqus