第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、网络连通性 |
八、思考
- OID 1.3.6.1.2.1.2.2.1.8 代表什么?
- 标准 MIB 和厂商私有 MIB 有什么区别?
- snmpwalk 和 snmpget 的区别是什么?
- 如果 snmpwalk 返回 "No Response",可能的原因有哪些?
- 华为交换机的 CPU 利用率 OID 是什么?
下篇预告:第128篇《NetStream/sFlow 流量采样与监控》——讲解基于流量的采样分析技术,用于网络性能监控、流量计费和异常检测。