我是 snmp4j 的新手。我使用 [1] 中的示例代码从 SNMP 流中提取一些有意义的信息。
在示例代码中,变量的 oid 和 value 被提取出来,但是 value 没有它的单位。例如
,oid 1.3.6.1.4.1.2021.4.6.0 (SNMP-MIB::memAvailReal.0) 给出的值 13385068 没有其单位 KB。有没有办法用 snmp4j 中的单位获取值?
有人可以看看这个吗?
我是 snmp4j 的新手。我使用 [1] 中的示例代码从 SNMP 流中提取一些有意义的信息。
在示例代码中,变量的 oid 和 value 被提取出来,但是 value 没有它的单位。例如
,oid 1.3.6.1.4.1.2021.4.6.0 (SNMP-MIB::memAvailReal.0) 给出的值 13385068 没有其单位 KB。有没有办法用 snmp4j 中的单位获取值?
有人可以看看这个吗?
我相信您要检索的值只是 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 相关联的元数据字典,从而更容易访问/更新和操作。
希望有帮助。