第127篇:SNMP MIB 与 OID——如何读取设备指标

关键词

MIB、OID、管理信息库、对象标识符、SNMP Walk、MIB 浏览器


一、MIB 与 OID 基础

1.1 什么是 MIB

MIB(Management Information Base)是 SNMP 可管理对象的结构化数据库。每个被管设备都有一个 MIB,包含了设备的所有可管理信息。

1.2 OID 树形结构

OID(Object Identifier)是一个树形结构的数字标识,每个节点代表一个可管理对象:

ISO (1)
  └── ITU-T (2)
       └── Joint (3)
            └── ... 
                 └── Internet (1.3.6.1)
                      ├── Directory (1.3.6.1.1)
                      ├── Mgmt (1.3.6.1.2)
                      │    └── mib-2 (1.3.6.1.2.1)
                      │         ├── system (1)
                      │         │    ├── sysDescr (1)  → 设备描述
                      │         │    ├── sysObjectID (2)
                      │         │    ├── sysUpTime (3) → 运行时间
                      │         │    ├── sysContact (4)
                      │         │    └── sysName (5)   → 设备名
                      │         ├── interfaces (2)
                      │         │    ├── ifNumber (1)  → 接口数
                      │         │    └── ifTable (2)
                      │         │         └── ifEntry (1)
                      │         │              ├── ifIndex (1)
                      │         │              ├── ifDescr (2)   → 接口描述
                      │         │              ├── ifType (3)
                      │         │              ├── ifMtu (4)
                      │         │              ├── ifSpeed (5)   → 接口速率
                      │         │              ├── ifAdminStatus (7)
                      │         │              └── ifOperStatus (8) → 运行状态
                      │         ├── ip (4)
                      │         ├── tcp (6)
                      │         └── udp (7)
                      └── Private (1.3.6.1.4)
                           └── enterprises (1.3.6.1.4.1)
                                ├── 华为 (2011)
                                ├── 思科 (9)
                                └── 其他厂商

1.3 常用 OID 示例

对象 OID 说明
系统运行时间 1.3.6.1.2.1.1.3.0 sysUpTime(秒)
系统名称 1.3.6.1.2.1.1.5.0 sysName
接口数量 1.3.6.1.2.1.2.1.0 ifNumber
接口描述 1.3.6.1.2.1.2.2.1.2 ifDescr(表)
接口状态 1.3.6.1.2.1.2.2.1.8 ifOperStatus(表)
接口输入字节 1.3.6.1.2.1.2.2.1.10 ifInOctets(表)
接口输出字节 1.3.6.1.2.1.2.2.1.16 ifOutOctets(表)
CPU 利用率 1.3.6.1.4.1.2011.6.1.3.3.1.1 华为私有 OID
内存利用率 1.3.6.1.4.1.2011.6.1.3.3.1.2 华为私有 OID

二、MIB 文件

2.1 标准 MIB vs 私有 MIB

类型 说明 来源
标准 MIB RFC 定义,通用 RFC 1213(MIB-II)、RFC 2863(IF-MIB)
私有 MIB 厂商自定义 华为、思科等厂商发布

2.2 加载 MIB 文件

网管系统(如 SolarWinds、Zabbix)需要加载对应设备的 MIB 文件才能解析 SNMP 数据:

# 华为 MIB 文件目录
HW-MIB.my                 # 华为基础 MIB
HUAWEI-L3IF-MIB.my       # 三层接口 MIB
HUAWEI-ENTITY-MIB.my     # 实体 MIB(电源、风扇)
LLDP-MIB.my              # LLDP MIB

三、SNMP 操作命令

3.1 使用 snmpwalk 采集数据

# 在 NMS 上使用 snmpwalk(Linux)
# 获取系统信息
snmpwalk -v2c -c public 10.254.1.1 1.3.6.1.2.1.1

# 获取所有接口
snmpwalk -v2c -c public 10.254.1.1 1.3.6.1.2.1.2.2.1.2

# 获取接口状态(OID 数字格式输出)
snmpwalk -On -v2c -c public 10.254.1.1 .1.3.6.1.2.1.2.2.1.8

# SNMP v3 方式
snmpwalk -v3 -u admin -l authPriv -a SHA -A AuthPass -x AES -X PrivPass 10.254.1.1 1.3.6.1.2.1.1

3.2 常用 snmp 命令

# 获取单个 OID
snmpget -v2c -c public 10.254.1.1 1.3.6.1.2.1.1.5.0
# SNMPv2-SMI::mib-2.1.5.0 = STRING: "Core-SW-01"

# 批量获取
snmpbulkget -v2c -c public 10.254.1.1 1.3.6.1.2.1.1

# 遍历表
snmpwalk -v2c -c public 10.254.1.1 1.3.6.1.2.1.2.2

3.3 在设备上测试 SNMP

# 在华为交换机上测试 SNMP 读取
snmp-agent test-get OID 1.3.6.1.2.1.1.5.0

四、CPU 和内存监控

华为 CPU/内存的私有 OID:

4.1 华为 VRP 设备

# CPU 利用率(最近5秒)
snmpwalk -v2c -c public 10.254.1.1 1.3.6.1.4.1.2011.6.1.3.2.1.1

# 内存利用率
snmpwalk -v2c -c public 10.254.1.1 1.3.6.1.4.1.2011.6.1.3.3.1.2

4.2 思科设备

# 思科 CPU
snmpwalk -v2c -c public 10.254.1.1 1.3.6.1.4.1.9.9.109.1.1.1

# 思科内存
snmpwalk -v2c -c public 10.254.1.1 1.3.6.1.4.1.9.9.48.1.1

五、MIB 浏览器

图形化的 MIB 浏览器可以方便地浏览 MIB 树:

工具 平台 说明
MG-SOFT MIB Browser Windows 商业工具,功能强大
SolarWinds MIB Browser Windows 免费
Net-SNMP Linux 命令行
PRTG MIB Importer Windows 内置

六、排错:SNMP 读取失败

问题 原因 解决
No Response ACL 丢弃了 SNMP 报文 检查 ACL 和防火墙
No Such Instance OID 不存在或不支持 检查 OID 是否正确
Wrong Community 团体字错误 检查 community 配置
Timeout 网络不通或设备繁忙 检查网络连通性
# 在设备上查看 SNMP 访问日志
display snmp-agent statistics
-----------------------------------------------
SNMP packets input: 2341
  Get-Request: 1200
  Get-Next: 1000
  Set-Request: 1
  ...
SNMP packets output: 2339
  Get-Response: 2338
  Trap: 1

七、总结

知识点 核心要点
MIB SNMP 管理信息库,树形结构
OID 每个管理对象的唯一数字标识
标准 MIB RFC 定义(如 mib-2、IF-MIB)
私有 MIB 厂商自定义(华为 2011、思科 9)
snmpwalk 遍历 OID 树获取信息
排错 ACL、团体字、OID、网络连通性

八、思考

  1. OID 1.3.6.1.2.1.2.2.1.8 代表什么?
  2. 标准 MIB 和厂商私有 MIB 有什么区别?
  3. snmpwalk 和 snmpget 的区别是什么?
  4. 如果 snmpwalk 返回 "No Response",可能的原因有哪些?
  5. 华为交换机的 CPU 利用率 OID 是什么?

下篇预告:第128篇《NetStream/sFlow 流量采样与监控》——讲解基于流量的采样分析技术,用于网络性能监控、流量计费和异常检测。