【问题标题】:How to get units of a variable from SNMP stream?如何从 SNMP 流中获取变量的单位?
【发布时间】:2014-05-26 06:30:26
【问题描述】:

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

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

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

有人可以看看这个吗?

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

【问题讨论】:

    标签: snmp snmp4j


    【解决方案1】:

    我相信您检索的值只是 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 文件的描述性元数据甚至不显示单位,因此无法从代码中获取该信息。

    编辑:

    我在 Google 上搜索了更多信息,发现另一个版本的 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 相关联的元数据字典,更易于访问/更新和操作。

    希望对您有所帮助。

    【讨论】:

    • 感谢马特,但是当您在终端中调用 snmpwalk 命令时,它也会显示单位。例如UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 9799456 kB 这怎么可能?
    • @Sajini 那么我会投票赞成你的问题!我也很想知道。通常 MIB 有一个 UNITS 条目,但是当您发布时,我在 Google 上搜索了您的 MIB,而我发布的内容就是我找到的……您有相关的 MIB 吗?
    • @Sajini 我在网上找到了另一个版本的 MIB,其中包括一个 UNITS 定义,所以更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2015-12-31
    相关资源
    最近更新 更多