snmp采集NE系列路由器,端口进出字节统计数值时,约50秒数值才会更新一次的问题

用snmp采集NE20系列的路由器设备,获取其中的端口信息,用来计算端口进出的实时流量。
我用的是java语言,调用的是snmp4j的函数。使用的OID是:

public static String IfInOctet="1.3.6.1.2.1.2.2.1.10";//端口接收到的字节数累计
public static String IfOutOctet="1.3.6.1.2.1.2.2.1.16";//端口发送的字节数累计

思路也很简单,就是把所有的端口的进出口流量数据获取到,然后把自己需要的端口的信息取出来。
一开始没有什么问题,华为的交换机以及H3C的路由器上都是正常,但是到了华为的NE路由器,就出问题了。发现还是正常按照我给定的频率,一秒轮询一次,也能收到回复。但是一连采集五十多秒,数据都不会变化,五十多秒以后,数据才会变化一次。
经过仔细的排查,找到了解决的方法。
将snmp的采集方式,从snmpWalk,换到snmpGet。这两者的区别,套用华为官方的解释。

snmpwalk:是对OID值的遍历(比如某个OID值下面有N个节点,则依次遍历出这N个节点的值。如果对某个叶子节点的OID值做walk,则取得到数据就不正确了,因为它会认为该节点是某些节点的父节点,而对其进行遍历,而实际上该节点已经没有子节点了,那么它会取出与该叶子节点平级的下一个叶子节点的值,而不是当前请求的节子节点的值。)
snmpget:是取具体的OID的值。(适用于OID值是一个叶子节点的情况)

意思就是说,比如我要取端口索引位55的端口信息,如果用snmpGet去取值,就应该将OID具体到端口,如:


public static String IfInOctet="1.3.6.1.2.1.2.2.1.10.55";//索引号为55的端口接收到的字节数累计
public static String IfOutOctet="1.3.6.1.2.1.2.2.1.16.55";//索引号为55的端口发送的字节数累计

这样获取到的就是实时变化的端口流量统计了。
至于为什么用snmpwalk采集树形的一系列数据,就会出现长时间不更新的问题,只能等着华为的售后给出解释了,或许是路由器的BUG,或许是我的操作有误。

猜你喜欢

转载自blog.csdn.net/baidu_31788709/article/details/104678503
今日推荐