v1使用的计数器是32位的,因此无法准确统计千兆接口的流量。而v2c是64位的,对于千兆接口就ok了。
snmp取回的接口流量数据是经过接口的总字节数,而不是实际的速率。若计算速率的话,需要取2次数据,然后用其差值除以2次取数据的间隔时间在乘以8即可。
对于snmp
v1,接口通过字节数的mib为IF-MIB::ifOutOctets和IF-MIB::ifInOctets
对于snmp
v2c,接口通过字节数的mib为IF-MIB::ifHCOutOctets和IF-MIB::ifInOutOctets
区别就是一个为32位,一个为64位。
计算速率的脚本如下:
##### cernet egress traffic #####
echo -n 'snmpwalk -v2c -c password 192.168.1.1
IF-MIB::ifHCOutOctets.5 | cut -d’ ‘ -f4' >
/tmp/result.tmp
echo -n ” ” >> /tmp/result.tmp
sleep 10
echo 'snmpwalk -v2c -c password 192.168.1.1 IF-MIB::ifHCOutOctets.5
| cut -d’ ‘ -f4' >>
/tmp/result.tmp
awk ‘{printf “Cernet egress rate: %d mbps\n”,($2-$1)*8/10000000}’
/tmp/result.tmp >>
/tmp/result.txt
##### cernet ingress traffic #####
echo -n 'snmpwalk -v2c -c password 192.168.1.1
IF-MIB::ifHCInOctets.5 | cut -d’ ‘ -f4' >
/tmp/result.tmp
echo -n ” ” >> /tmp/result.tmp
sleep 10
echo 'snmpwalk -v2c -c password 192.168.1.1 IF-MIB::ifHCInOctets.5
| cut -d’ ‘ -f4' >>
/tmp/result.tmp
awk ‘{printf “Cernet ingress rate: %d mbps”,($2-$1)*8/10000000}’
/tmp/result.tmp >>
/tmp/result.txt
输出结果如下:
Cernet egress rate: 41 mbps
Cernet ingress rate: 59 mbps