我是snmp4j的新手。我使用[1]中的示例代码从SNMP流中提取一些有意义的信息。
在示例代码中,提取了变量的oid和值,但该值没有单位。例如
,oid 1.3.6.1.4.1.2021.4.6.0(SNMP-MIB :: memAvailReal.0)给出的值为13385068,没有单位KB。有没有办法在snmp4j中获取其单位的值?
有人可以看看吗?
答案 0 :(得分:3)
我相信您检索的值只是Integer32类型的SCALAR。
MIB中的描述是"主机上的可用实际/物理内存空间。"
它甚至没有指定那里的单位,所以我不认为有任何地方可以从中检索单位数据。如果我错了,很高兴被某人纠正!
memAvailReal OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Available Real/Physical Memory Space on the host."
::= { memory 6 }
换句话说,它的数字值和MIB文件中的描述性元数据甚至不会显示单位,因此无法从代码中获取该信息。
修改强>
我搜索了更多内容,发现了另一个版本的UCD-SNMP-MIB具有以下定义:
memAvailReal OBJECT-TYPE
SYNTAX Integer32
UNITS "kB"
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The amount of real/physical memory currently unused
or available."
::= { memory 6 }
因此,此版本的MIB中提供了信息...
看起来你可以使用SmiManager类来使用这些信息:
http://www.snmp4j.org/smi/doc/com/snmp4j/smi/SmiManager.html
https://oosnmp.net/confluence/pages/viewpage.action?pageId=5799973
但是将SmiManager集成到您的应用程序中可能并不简单(而且在进一步研究它时,似乎需要使用SmiManager才能获得许可证!)。
对于我自己的小项目,我预先解析MIB并在我的NoSQL数据库中存储我需要的部分,而不是包括完整的MIB解析支持。这样我就可以获得与每个OID相关联的元数据的字典,这些元数据更容易访问/更新和操作。
希望有所帮助。