最近,在用java利用snmp协议编写一个统计网络设备流量的程序,发现snmp协议中,设备端口流量的数值是累积的流量值,需要通过差值除以时间差,才能得到端口每秒的流量。可是对应端口流量的数据类型是无符号32位的,对于千兆级以上的端口,几十秒的时间,这个值就会达到最大,然后就会归零并重新开始累积。
我知道cacti也是用snmp协议采集数据的,默认是5分钟统计一次。对于流量很大的端口,5分钟内,流量数据会发生很多次归零的情况。那cacti是怎么处理这种情况的呢?我没学过php,所以无法研究它的源码,难道cacti是时时刻刻都在采集数据吗?不知道有没有研究过cacti工具的前辈,指点我一下。谢谢了!
回复讨论(解决方案) 1个字不够,那么他为什么不能是2个字呢?
1个字不够,那么他为什么不能是2个字呢?
这个不是我能控制的呀,snmp协议里定义的数据类型就是这样的。我只能通过这个协议取值,而无法改变这个协议。
我知道问题所在了,cacti利用snmpv2协议,是可以支持64位的。不过我却不知道怎么用java+snmp4j,采集出64位的流量。唉,网上相关的资源太少了。