简单网络管理协议 - 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 交换机或路由器)的系统,这些代理会响应数据。存在各种命令行工具来轮询代理,例如 snmpgetsnmpgetnextsnmpwalksnmpbulkgetsnmpbulkwalk。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.1iso.org.dod.internet 部分是定义互联网资源的 OID。后面的 2mgmt 用于管理子类别。下面的 1mib-2 定义了 MIB-2 规范。1system 是子对象 sysDescrsysObjectIDsysUpTimesysContactsysNamesysLocationsysServices 等的父对象,正如您在下面第二个 snmptranslate 命令的树输出中看到的那样,其中 sysLocation6

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