在这份介绍中, 我们将覆盖关于 SNMP 网络协议的基本信息, 包括像 OIDs 和 MIBs 这样的关键概念。
SNMP (Simple Network Management Protocol) 是一种监控网络设备的协议。它使用 UDP 协议并且同时支持 “请求/响应” 模型 (命令和查询) 和 “通知” 模型 (traps, informs)。
在 “请求/响应” 模型中, SNMP 管理者 (如: Datakit, Datadog Agent) 发送一个 SNMP 命令 (GET, GETNEXT, BULK) 给一个 SNMP 代理者 (如: 一个网络设备)。
SNMP 诞生于 1980 年, 所以它已经存在很长一段时间了。虽然有更多的现代可选方案如 NETCONF 和 OpenConfig 正在逐渐获取注意, 一大批网络设备仍然使用 SNMP 协议作为它们首选的监控接口。
SNMP 协议有 3 个版本: v1 (已停产), v2c, 和 v3.
v1/v2c 和 v3 主要的区别在于鉴权机制和传输层, 总结如下:
| 版本 | 鉴权 | 传输层 |
|---|---|---|
v1/v2c | 密码 (the community string, 团体名) | 只有明文 |
v3 | 用户名/密码 | 支持包签名和加密 |
OID, 也称为 对象标识符 , 是一种能从 SNMP 设备中获取的一个 “对象” 的标识符。这些 “对象” 包括运行时间、温度、网络流量等 (可用 “对象” 在不同设备之间会不同)。
To make them processable by machines, OIDs are represented as dot-separated sequences of numbers, e.g. 1.3.6.1.2.1.1.1.
为了让它们能被机器处理, OID 们 (OIDs) 以点分隔数列方式呈现, 如 1.3.6.1.2.1.1.1。
OID 们 (OIDs) 是全局定义的, 也就意味着无论 SNMP 查询的设备是什么, 它们具有相同的含义。比如说, 在任何 SNMP 代理者上查询 1.3.6.1.2.1.1.1 OID (也被称为 sysDescr) 将返回系统描述。(更多的 “OID/标签” 对应关系将出现在下面的 MIBs 节。)
OIDs 能指向各种对象类型, 如字符串、数字、表格等。
特别地, 这意味着实际上只有一小部分指向数字对象的 OIDs 指标能发送到 Datakit/Datadog。然而, 非数字的 OIDs 也非常有用, 尤其是标记 (tagging)。
OIDs 结构上像树。OID 中每个数字代表树上的一个节点。
这种通配符符号经常用于指向 OIDs 的一颗子树, 如: 1.3.6.1.2.*。
碰巧有两种主要的 OID 子树: 一种子树是用于能用 OIDs 的, 另一种子树是用于品牌专用的 OIDs。
在子树下: 1.3.6.1.2.1.* (也就是 SNMPv2-MIB 或者 mib-2)。
这些 OIDs 对所有的网络设备适用 (尽管所有设备可能不会在这颗子树中暴露全部 OIDs)。
例如, 1.3.6.1.2.1.1.1 对应 sysDescr, 包含了一种形式自由、人类可读描述的设备。
在子树下: 1.3.6.1.4.1.* (也就是 企业)。
这些 OIDs 由网络设备品牌商自己定义和管理。
每个品牌商在他们自己子树 1.3.6.1.4.1. 下分配。
例如:
1.3.6.1.4.1.2.* 是 IBM 专用的 OIDs 子树.1.3.6.1.4.1.9.* 是 Cisco 专用的 OIDs 子树.完整的品牌子树可以在这里找到: SNMP OID 1.3.6.1.4.1。
| OID | 标签 | 描述 |
|---|---|---|
1.3.6.1.2.1.2 | sysObjectId | 代表这个设备制造和型号 (是的, 一点元信息) 的 OID 值。 |
1.3.6.1.2.1.1.1 | sysDescr | 这个设备人类可读、形式自由的描述。 |
1.3.6.1.2.1.1.3 | sysUpTimeInstance | 设备的运行时间。 |
OIDs 是分组于 MIBs(Management Information Base) 中的模块。MIB 描述了既定 OIDs 间的层次关系。(这有点类似于包含口语中每个单词定义的词典。)
例如, IF-MIB 描述了 OIDs 在 1.3.6.1.2.1.2.* 子树中的层次关系。这些 OIDs 包含了设备中可用网络接口的指标。(注意它在 1.3.6.1.2.* 子树下的位置关系表明它是一个通用 MIB, 在大多数网络设备中可用。)
作为描述 OIDs 的一部分,MIB 定义了每一个 OID 人类可读到的标签。例如,IF-MIB 描述了 OID 1.3.6.1.2.1.1 并且被分配标签 sysDescr。这项包含于在标签中找到 OID 的操作被称为 OID 解析(OID resolution)。
在处理与 MIBs 相关的工作时下列的资源会有用:
.mib 文件的存储库和搜索引擎。pysnmp-mibs(用于 SNMP Python 检查)是实际验证依据。在这个存储库中二次检查任何一个从另一个替代源中获取的 MIB。其它更高级的 SNMP 概览,可以查阅: