如何从SNMP流中获取变量的单位?

时间:2014-05-26 06:30:26

标签: snmp snmp4j

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

在示例代码中,提取了变量的oid和值,但该值没有单位。例如

,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

1 个答案:

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

希望有所帮助。