如何确定用于监控的正确 OID

如何确定用于监控的正确 OID

是否有正确/更好的方法来确定用于 SNMP 监控的正确 OID?

我能够直接从设备下载 MIB,但我在数百个 OID 列表中找不到正确的 OID。我遇到的所有论坛都有不同的型号 OID,或者只是说“使用 OID 就可以了”,但没有详细说明...

采取的措施

  • 从设备下载 MIB
  • 已验证我可以 ping 设备
  • 已验证我可以在设备上运行 snmpwalk(注意,我并不熟悉 snmpwalk 的所有功能和用法)

答案1

从我的经验来看,很遗憾不行,我必须获取 MIB 并尝试在其中找到我需要查询的正确内容。(我使用了一个简单的 mib 浏览器)

对于您发现的 OID,温度过高,请确保它不是在触发时将其设置为 on/1 的布尔值,这可以解释为什么如果设备在正常温度下运行则您什么也读不到。

遗憾的是,OID 的使用和文档在网上被低估了,并不流行。我曾经在监控工具中为未知设备创建监控模板,我这样做被视为黑魔法用户。

我能告诉的唯一提示是注意返回值,有些即使写成数字也是字符串,而其他的只是整数。

答案2

虽然 MIB 浏览器确实可以提供帮助,但您可以使用 NET-SNMP 命令进行大量解析snmptranslate。有很多选项,因此请查阅其手册页,但这里有几个示例。

假设我已下载 Synology 设备的 MIB 并想对其进行监控。我可以使用 snmptranslate 以更用户友好的方式查看 MIB,而不仅仅是读取原始 MIB 文件。

首先,我将检查我已下载的 SYNOLOGY-SYSTEM-MIB.txt。

  • 让我们找出 MIB 的实际名称。有时它与 MIB 文件的名称相同,但并非总是如此。语句DEFINITIONS用于定义 MIB 的名称。

     $ grep DEFINITIONS SYNOLOGY-SYSTEM-MIB.txt
     SYNOLOGY-SYSTEM-MIB DEFINITIONS ::= BEGIN
    

    所以现在我知道 MIB 被称为SYNOLOGY-SYSTEM-MIB

  • 接下来,我将向内查看以找到其中定义的顶级 OID:

    $ grep MODULE-IDENTITY SYNOLOGY-SYSTEM-MIB.txt
    enterprises, MODULE-IDENTITY, OBJECT-TYPE, Integer32
    synoSystem MODULE-IDENTITY
    

    最后一行是比较有趣的,具体来说synoSystem。这是最上面的 OID,我现在可以使用它来获取 MIB 的结构。

  • 当以文本形式轮询 OID 时,MIB::OID应使用符号。这样 snmp 命令就知道使用哪个 MIB 将 OID 转换为代理可以理解的数字形式(与 DNS 转换的原理非常相似):

    $ snmptranslate -Tp SYNOLOGY-SYSTEM-MIB::synoSystem
    

    输出为:

    +--synoSystem(1)
       +-- -R-- Integer32 systemStatus(1)
       |        Range: 1..2
       +-- -R-- Integer32 temperature(2)
       +-- -R-- Integer32 powerStatus(3)
       |        Range: 1..2
       |
       +--fan(4)
       |  |
       |  +-- -R-- Integer32 systemFanStatus(1)
       |  |        Range: 1..2
       |  +-- -R-- Integer32 cpuFanStatus(2)
       |           Range: 1..2
       |
       +--dsmInfo(5)
       |  |
       |  +-- -R-- String    modelName(1)
       |  +-- -R-- String    serialNumber(2)
       |  +-- -R-- String    version(3)
       |  +-- -R-- Integer32 upgradeAvailable(4)
       |           Range: 1..5
       |
       +--systemConformance(6)
          |
          +--systemCompliances(1)
          |  |
          |  +--systemCompliance(1)
          |
          +--systemGroups(2)
             |
             +--systemGroup(1)
    
  • 现在,假设我对 OID 感兴趣,upgradeAvailable这样我就可以知道何时可以升级此框上的 DSM。我可以通过运行以下命令找到有关它的更多详细信息:

      $ snmptranslate -Td SYNOLOGY-SYSTEM-MIB::upgradeAvailable
    

    输出为:

      SYNOLOGY-SYSTEM-MIB::upgradeAvailable
      upgradeAvailable OBJECT-TYPE
        -- FROM       SYNOLOGY-SYSTEM-MIB
        SYNTAX        Integer32 (1..5)
        MAX-ACCESS    read-only
        STATUS        current
        DESCRIPTION   "This oid is for checking whether there is a latest DSM can be upgraded.
               Available(1): There is version ready for download.
               Unavailable(2): The DSM is latest version.
               Connecting(3): Checking for the latest DSM.
               Disconnected(4): Failed to connect to server.
               Others(5): If DSM is upgrading or downloading, the status will show others."
      ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) synology(6574) synoSystem(1) dsmInfo(5) 4 }
    

    因此现在当我实际轮询设备时,我知道我正在运行最新的 DSM:

      $ snmpwalk <snmp parameters> <device> SYNOLOGY-SYSTEM-MIB::upgradeAvailable
      SYNOLOGY-SYSTEM-MIB::upgradeAvailable.0 = INTEGER: 2
    

希望这对某人有帮助。

相关内容