2

我是 snmp4j 的新手。我使用 [1] 中的示例代码从 SNMP 流中提取一些有意义的信息。

在示例代码中,变量的 oid 和 value 被提取出来,但是 value 没有它的单位。例如

,oid 1.3.6.1.4.1.2021.4.6.0 (SNMP-MIB::memAvailReal.0) 给出的值 13385068 没有其单位 KB。有没有办法用 snmp4j 中的单位获取值?

有人可以看看这个吗?

[1] https://gist.github.com/akirad/5597203

4

1 回答 1

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 相关联的元数据字典,从而更容易访问/更新和操作。

希望有帮助。

于 2014-05-26T06:43:20.100 回答