这里填写标题
1. SNMP 网络协议介绍
在这份介绍中, 我们将覆盖关于 SNMP 网络协议的基本信息, 包括像 OIDs 和 MIBs 这样的关键概念。
1.1. 什么是 SNMP
1.1.1. 概述
SNMP (Simple Network Management Protocol) 是一种监控网络设备的协议。它使用 UDP 协议并且同时支持 “请求/响应” 模型 (命令和查询) 和 “通知” 模型 (traps
, informs
)。
在 “请求/响应” 模型中, SNMP 管理者 (如: Datakit, Datadog Agent) 发送一个 SNMP 命令 (GET
, GETNEXT
, BULK
) 给一个 SNMP 代理者 (如: 一个网络设备)。
SNMP 诞生于 1980 年, 所以它已经存在很长一段时间了。虽然有更多的现代可选方案如 NETCONF 和 OpenConfig 正在逐渐获取注意, 一大批网络设备仍然使用 SNMP 协议作为它们首选的监控接口。
1.1.2. SNMP 版本
SNMP 协议有 3 个版本: v1
(已停产), v2c
, 和 v3
.
v1/v2c
和 v3
主要的区别在于鉴权机制和传输层, 总结如下:
版本 | 鉴权 | 传输层 |
---|---|---|
v1/v2c | 密码 (the community string , 团体名) | 只有明文 |
v3 | 用户名/密码 | 支持包签名和加密 |
1.2. OIDs
1.2.1. 什么是 OID
1.2.1.1. 可查询数量的标识符
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
。
1.2.1.2. 全局定义
OID 们 (OIDs) 是全局定义的, 也就意味着无论 SNMP 查询的设备是什么, 它们具有相同的含义。比如说, 在任何 SNMP 代理者上查询 1.3.6.1.2.1.1.1
OID (也被称为 sysDescr
) 将返回系统描述。(更多的 “OID/标签” 对应关系将出现在下面的 MIBs
节。)
1.2.1.3. 不是所有 OIDs 都含有指标数据
OIDs 能指向各种对象类型, 如字符串、数字、表格等。
特别地, 这意味着实际上只有一小部分指向数字对象的 OIDs 指标能发送到 Datakit/Datadog。然而, 非数字的 OIDs 也非常有用, 尤其是标记 (tagging)。
1.2.2. OID 树
OIDs 结构上像树。OID 中每个数字代表树上的一个节点。
这种通配符符号经常用于指向 OIDs 的一颗子树, 如: 1.3.6.1.2.*
。
碰巧有两种主要的 OID 子树: 一种子树是用于能用 OIDs 的, 另一种子树是用于品牌专用的 OIDs。
1.2.2.1. 通用 OIDs
在子树下: 1.3.6.1.2.1.*
(也就是 SNMPv2-MIB
或者 mib-2
)。
这些 OIDs 对所有的网络设备适用 (尽管所有设备可能不会在这颗子树中暴露全部 OIDs)。
例如, 1.3.6.1.2.1.1.1
对应 sysDescr
, 包含了一种形式自由、人类可读描述的设备。
1.2.2.2. 品牌 OIDs
在子树下: 1.3.6.1.4.1.*
(也就是 企业)。
这些 OIDs 由网络设备品牌商自己定义和管理。
每个品牌商在他们自己子树 1.3.6.1.4.1.<N>.*
下分配。
例如:
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。
1.2.3. 值得注意的 OID
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 | 设备的运行时间。 |
1.3. MIBs
1.3.1. 什么是 MIB
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)。
1.3.2. 工具和资源
在处理与 MIBs 相关的工作时下列的资源会有用:
- MIB Discovery: OIDs 的一个搜索引擎。用于找到一个 OID 对应什么,它从哪个 MIB 中来,是已经的哪个标签,等等。
- Circitor MIB files repository: 可以下载实际
.mib
文件的存储库和搜索引擎。 - SNMP Labs MIB repository: 许多共同 MIBs 的存储库替代。注意: 这个站点托管了 MIBs 的基础库
pysnmp-mibs
(用于 SNMP Python 检查)是实际验证依据。在这个存储库中二次检查任何一个从另一个替代源中获取的 MIB。
1.4. 学习更多
其它更高级的 SNMP 概览,可以查阅:
- SNMP 如何工作(Youtube)
- SNMP(Wikipedia)
- 教程: 网络管理和 SNMP(Youtube)(关于 SNMP 架构、MIBs、协议数据结构、安全模型、监控例子源码等等的深度视频。)