是否有正确/更好的方法来确定用于 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
希望这对某人有帮助。