简单网络管理协议 - SNMP
SNMP 是一种基于 IETF 标准的网络管理架构和协议。Cumulus Linux 使用开源的 Net-SNMP 代理 snmpd
,它为大多数常见的行业通用 MIB 提供支持,包括接口计数器以及 TCP 和 UDP IP 堆栈数据。Cumulus Linux 中的 SNMP 版本添加了自定义 MIB 和直通,以及 pass-persist 脚本。
SNMP 组件
Cumulus Linux 中 SNMP 的主要组件包括
- SNMP 网络管理系统 (NMS)
- SNMP 代理
- MIB(管理信息库)
SNMP 网络管理系统
SNMP 网络管理系统 (NMS) 是一个配置为轮询 SNMP 代理(例如 Cumulus Linux 交换机或路由器)的系统,这些代理会响应数据。存在各种命令行工具来轮询代理,例如 snmpget
、snmpgetnext
、snmpwalk
、snmpbulkget
和 snmpbulkwalk
。SNMP 代理还可以根据预定义的标准(例如链路更改)向 NMS 发送主动陷阱和通知消息。
SNMP 代理
在 Cumulus Linux 交换机上运行的 SNMP 代理 (snmpd
) 收集有关本地系统的信息并将数据存储在 MIB 中。MIB 树的一部分是可用的,并提供给来自已使用正确凭据进行身份验证的 NMS 主机的传入请求。您可以配置 Cumulus Linux 交换机的用户名和凭据,以便为 NMS 请求提供经过身份验证和加密的响应。snmpd
代理还可以代理请求并充当在其他守护程序(例如 FRR 或 LLDP)上运行的子代理的主代理。
管理信息库 (MIB)
MIB 是在代理上运行的 snmpd
服务的数据库。MIB 遵循 IETF 标准,但足够灵活,允许供应商特定的添加。Cumulus Linux 在交换机上的一组文本文件中包含自定义企业 MIB 表;这些文件位于 /usr/share/snmp/mibs/
中,并且它们的名称都以 Cumulus 开头;例如,Cumulus-Counters-MIB.txt。
MIB 是一个自上而下的分层树。每个分支都具有一个标识号(从 1 开始)和一个在该层次结构级别中唯一的标识字符串。您可以互换使用字符串和数字。父 ID(数字或字符串)组合在一起,从最一般的情况开始,形成 MIB 对象的地址。此表示法中的点表示层次结构中的每个连接点,因此地址是由点分隔的一系列 ID 字符串或数字。整个地址是一个对象标识符 (OID)。
您可以使用各种在线和命令行工具在数字和字符串之间进行转换,并为各种 MIB 对象提供定义。例如,您可以将系统表中的 sysLocation 对象(在 SNMPv2-MIB.txt
中)视为一系列数字 1.3.6.1.2.1.1.6 或字符串 iso.org.dod.internet.mgmt.mib-2.system.sysLocation。您可以使用 snmptranslate
命令查看定义,该命令是 Cumulus Linux 中 snmp
Debian 软件包的一部分。
cumulus@switch:~$ snmptranslate -Td -On SNMPv2-MIB::sysLocation
.1.3.6.1.2.1.1.6
sysLocation OBJECT-TYPE
-- FROM SNMPv2-MIB
-- TEXTUAL CONVENTION DisplayString
SYNTAX OCTET STRING (0..255)
DISPLAY-HINT "255a"
MAX-ACCESS read-write
STATUS current
DESCRIPTION "The physical location of this node (e.g., 'telephone
closet, 3rd floor'). If the location is unknown, the
value is the zero-length string."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 6 }
在上面的最后一行中,1.3.6.1 或 iso.org.dod.internet 部分是定义互联网资源的 OID。后面的 2 或 mgmt 用于管理子类别。下面的 1 或 mib-2 定义了 MIB-2 规范。1 或 system 是子对象 sysDescr、sysObjectID、sysUpTime、sysContact、sysName、sysLocation、sysServices 等的父对象,正如您在下面第二个 snmptranslate
命令的树输出中看到的那样,其中 sysLocation 是 6。
cumulus@leaf01:mgmt:~$ snmptranslate -Tp -IR system
+--system(1)
|
+-- -R-- String sysDescr(1)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- ObjID sysObjectID(2)
+-- -R-- TimeTicks sysUpTime(3)
| |
| +--sysUpTimeInstance(0)
|
+-- -RW- String sysContact(4)
| Textual Convention: DisplayString
| Size: 0..255
+-- -RW- String sysName(5)
| Textual Convention: DisplayString
| Size: 0..255
+-- -RW- String sysLocation(6)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- INTEGER sysServices(7)
| Range: 0..127
+-- -R-- TimeTicks sysORLastChange(8)
| Textual Convention: TimeStamp
|
+--sysORTable(9)
|
+--sysOREntry(1)
| Index: sysORIndex
|
+-- ---- INTEGER sysORIndex(1)
| Range: 1..2147483647
+-- -R-- ObjID sysORID(2)
+-- -R-- String sysORDescr(3)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- TimeTicks sysORUpTime(4)
Textual Convention: TimeStamp