目录

简介

先决条件

要求

使用的组件

SNMP与遥测

在WLC上配置SNMP

通过Web界面

通过命令行

对象名称和对象ID(OID)

什么是对象名称和OID?

MIB和Cisco WLC上所有对象名称和ID的列表

使用OID监控WLC的状态

通过Snmpwalk监控

通过Python3和Pysnmp库进行监控

与第三方软件集成（Grafana+Prometheus/PRTG网络监控器/SolarWinds）

与CUCM集成

最常见受监控OID的表

HA中的监控备用WLC

直接监控备用WLC

通过主用WLC监控备用WLC

简介

本文档介绍如何配置简单网络管理协议(SNMP)以监控Cisco 9800无线局域网控制器(WLC)。

先决条件

要求

- 9800 WLC和SNMP协议的基础知识

- SNMP服务器/工具

使用的组件

所有测试均在MacOS 10.14和映像版本17.5.1的9800-CL WLC上执行。本文中提到的一些OID在较早映像版本中不存在。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

SNMP与遥测

旧版AireOS WLC依靠SNMP作为监控器的主要协议。大多数相关信息（如客户端计数、加入的接入点数量、处理器和内存使用率）都可以通过SNMP查询从监控工具获取到WLC。

9800 WLC的重点在于遥测。遥测在“推送”模式下工作，其中WLC无需查询即可向服务器发送相关信息。Catalyst 9800仍提供SNMP以用于传统用途。有些信息可以独家用于遥测，而一些OID以前在AireOS上可用，现在在9800上尚不可用。

在WLC上配置SNMP

从Cisco IOS XE Bengaluru 17.6.1,Cisco Catalyst 9800系列无线控制器支持以太网服务端口（管理接口VRF/GigabitEthernet 0）。

在此版本之前，Catalyst 9800 WLC只能通过SNMP通过其无线管理接口或冗余管理接口进行监控（在版本17.5.1及更高版本的HA集群中的备用WLC的情况下）。

通过Web界面

SNMPv2c是基于团体的SNMP版本，设备之间的所有通信都以明文形式进行。SNMPv3是最安全的版本，它提供数据包的消息完整性检查、身份验证和加密。SNMPv1已经非常过时，但仍能提供传统软件兼容性。本文未提及。

重要信息：默认情况下，SNMPv2c通过具有读写权限的社区“private”和具有只读权限的社区“public”启用。建议删除这些社区并使用其他名称创建新社区。

登录到9800 WLC的Web界面。在Administration > Management > SNMP下，确保全局启用SNMP。在社区字符串下，将显示所有当前配置的社区及其权限级别：

创建SNMP V3用户之前，需要定义SNMP V3组。要创建具有读+写权限的用户组，请将Read View和Write View设置为v1default。只读组需要将写视图为空

在SNMP V3 Users选项卡下，您可以看到所有已配置的用户、其权限以及用于身份验证和加密的协议。 按钮New允许创建新用户。

有3种安全模式可用：

1. AuthPriv =对消息进行身份验证和加密

2. AuthNoPriv =消息经过身份验证，但未加密

3. NoAuthNoPriv =未对邮件应用安全措施

选择SHA作为身份验证协议，建议至少使用AES-128作为隐私协议。

通过命令行

也可通过命令行界面(CLI)配置SNMP。CLI提供其他配置参数，例如为v2社区或v3用户分配访问列表的功能。

v2读写社区、v3读写组以及属于此组的v3用户的配置示例：

snmp-server manager

snmp-server community

RW

snmp-server community

RO

snmp-server group

v3 auth write v1default snmp-server user

v3 auth sha

priv aes 128

access

仅允许IP地址192.168.10.10上的设备查询名为“ReadWriteCommunity”的WLC v2社区的访问列表示例：

ip access-list standard 50

10 permit 192.168.10.10

20 deny   any

snmp-server manager

snmp-server community ReadWriteCommunity RW 50

注意： 在撰写本文档时，仅支持标准ACL。可以分配扩展ACL，但它们不起作用。

对象名称和对象ID(OID)

什么是对象名称和OID?

对象ID（简称为OID）是表示特定变量或对象的唯一标识符。例如，当前处理器使用率被视为变量，可根据对象ID通过调用检索这些值。每个OID都是唯一的，全世界不能有两个OID，非常类似于MAC地址。

这些标识符遵循树层次结构，每个OID都可以追溯到其根。每个供应商都有自己的具有公共根的分支机构。

打个比方，可以是一个家庭地址，其根可以是国家/地区或州，后面是城市的邮政编码、街道以及最终的家庭号码。

后跟圆点的数字表示到达树或分支中的某个点所需的每个步骤。

所有这些值都存储在每台网络设备的管理信息库（简称MIB）中。每个标识符都有名称和定义（可能值的范围，类型……）。

要使用SNMP和查询设备，不需要在SNMP监控工具上加载MIB。

只要知道有效的OID，设备就会使用存储在OID所代表的变量中的值进行响应。但是，如果将MIB加载到查询工具中，则它提供了将对象名称转换为其ID的优势，并允许了解其说明。

在本示例中，SNMP工具使用OID 1.3.6.1.2.1.1.1.0查询设备的SNMP代理的系统说明。

MIB和Cisco WLC上所有对象名称和ID的列表

思科为9800 WLC提供管理信息库(MIB)。它不容易读取，但MIB包含所有可用的对象名称及其说明。

所有9800型号(9800-80、9800-40、9800-L、9800-CL、EWC)都使用相同的MIB，可以在以下位置下载：https://software.cisco.com/download/home/286322605/type/280775088/release/。

最新版本是拥有最新日期的，而不是代码版本名称较高的版本。

下载的存档文件包含多个.my文本文件，可以导入到任何第三方SNMP服务器，也可以使用文本编辑器打开。要查找特定对象名称的OID，首先需要找到包含它的确切文件。

例如，与监控设备物理状态相关的所有对象（如CPU和内存）都位于名为CISCO-PROCESS-MIB.my的MIB中。

此处，“cpmCPUMemoryUsed”是用于提供WLC使用的内存量（以字节为单位）的对象名称。MIB文件都使用类似的语法。有关已用内存对象的信息如下所示：

cpmCPUMemoryUsed OBJECT-TYPE

SYNTAX          Gauge32

UNITS           "kilo-bytes"

MAX-ACCESS      read-only

STATUS          current

DESCRIPTION

"The overall CPU wide system memory which is currently

under use."

::= { cpmCPUTotalEntry 12 }

大多数要监控的第三方软件依赖于OID，而不是对象名称。使用Cisco SNMP object navigator工具可以完成对象名称和对象ID之间的转换。

在搜索栏中输入对象名称。输出提供了OID和简短说明。 此外，还可以使用相同的工具查找所提供的OID的对象名称。

使用OID监控WLC的状态

在获取需要监控的对象的OID之后，可以执行第一个SNMP查询。

本章中的示例展示如何为SNMPv2社区专用和SNMPv3用户snmpadmin获取WLC可用内存(OID = 1.3.6.1.4.1.9.9.48.1.1.1.5)，并将SHA身份验证密码Cisco123#和AES隐私密码设置为Cisco123#。控制器管理接口位于10.48.39.133。

通过Snmpwalk监控

Snmpwalk是使用SNMP GETNEXT请求查询网络实体以获取信息树的SNMP应用。默认情况下，它存在于MacOS和大多数Linux发行版上。对于SNMPv2c，命令遵循以下语法：

snmpwalk -v2c -c

示例：

VAPEROVI:~ vaperovi$ snmpwalk -v2c -c private 10.48.39.133 1.3.6.1.4.1.9.9.109.1.1.1.1.12

SNMPv2-SMI::enterprises.9.9.109.1.1.1.1.12.2 = 3783236 <-------- Free Memory in Bytes

如果使用SNMPv3，命令遵循以下语法：

snmpwalk -v3 -l authPriv -u <username> -a [MD5|SHA] -A <auth_password> -x [AES|DES] -X <priv_password> <WLC_management_interface_ip> <OID>

根据在控制器上创建SNMPv3用户的方式，选择MD5/SHA和AES/DES。

示例：

VAPEROVI:~ vaperovi$ snmpwalk -v3  -l authPriv -u snmpadmin -a SHA -A Cisco123# -x AES -X Cisco123# 10.48.39.133 1.3.6.1.4.1.9.9.109.1.1.1.1.12

SNMPv2-SMI::enterprises.9.9.109.1.1.1.1.12.2 = 3783236 <-------- Free Memory in Bytes

#snmpwalk output still shows v2 even though v3 is used

通过Python3和Pysnmp库进行监控

为Python 3.9编写代码片段，并利用pysnmp模块(pip install pysnmp)对Catalyst 9800-CL WLC的内存利用率进行SNMP查询。这些示例使用在前面的章节之一中创建的相同SNMPv2社区和SNMPv3用户。只需替换变量值并将代码集成到您自己的自定义脚本中即可。

SNMPv2示例：

from pysnmp.hlapi import *

communityName = 'private'

ipAddress = '10.48.39.133'

OID = '1.3.6.1.4.1.9.9.109.1.1.1.1.12'

for (errorIndication,

errorStatus,

errorIndex,

varBinds) in nextCmd(SnmpEngine(),

CommunityData(communityName),

UdpTransportTarget((ipAddress, 161)),

ContextData(),

ObjectType(ObjectIdentity(OID)),

lexicographicMode=False):

if errorIndication:

print(errorIndication)

elif errorStatus:

print('%s at %s' % (errorStatus.prettyPrint(),

errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))

else:

for varBind in varBinds:

print(' = '.join([x.prettyPrint() for x in varBind]))

输出输出为：

SNMPv2-SMI::enterprises.9.9.109.1.1.1.1.12.2 = 3783236

SNMPv3示例：

from pysnmp.hlapi import *

username = 'snmpadmin'

ipAddress = '10.48.39.133'

OID = '1.3.6.1.4.1.9.9.109.1.1.1.1.12'

authKey = 'Cisco123#'

privKey = 'Cisco123#'

for (errorIndication,

errorStatus,

errorIndex,

varBinds) in nextCmd(SnmpEngine(),

UsmUserData(username, authKey, privKey,

authProtocol=usmHMACSHAAuthProtocol,

privProtocol=usmAesCfb128Protocol),

UdpTransportTarget((ipAddress, 161)),

ContextData(),

ObjectType(ObjectIdentity(OID)),

lexicographicMode=False):

if errorIndication:

print(errorIndication)

elif errorStatus:

print('%s at %s' % (errorStatus.prettyPrint(),

errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))

else:

for varBind in varBinds:

print(' = '.join([x.prettyPrint() for x in varBind]))

与第三方软件集成（Grafana+Prometheus/PRTG网络监控器/SolarWinds）

Cisco Prime基础设施能够轻松监控和配置多个网络设备，包括无线控制器。

Prime基础设施预装了所有OID，与WLC的集成只是向Prime添加WLC凭证。由于9800个WLC，Prime主要依靠遥测从WLC收集大部分详细信息，而一小部分信息通过SNMP获取。

另一方面，Cisco WLC还可以与多个第三方监控解决方案集成，只要已知OID。

Grafana+Prometheus、PRTG Network monitor和SolarWinds服务器等程序允许导入MIB或OID，并以用户友好的图形显示值。

此集成可能需要在SNMP服务器端进行一些调整。在本示例中，为PRTG监控器服务器提供每核心CPU利用率OID，该OID返回字符串“0%/1%、1%/1%、0%/1%、0%/1%”。PRTG需要整数值并引发错误。

与CUCM集成

Cisco Unified Communications Manager(CUCM)具有无线终端跟踪功能，允许它根据客户端所连接的AP大致跟踪客户端位置。要使用此功能，CUCM必须通过SNMP查询从WLC提取信息。

重要信息：许多CUCM版本受Cisco Bug ID CSCvv07486 — 由于SNMP请求过大，因此无法在WLC中同步接入点。当CUCM运行受影响的版本并且WLC具有10个以上接入点时，会触发此问题。由于CUCM在单个批量请求中查询大量OID的方式不正确，WLC会拒绝应答或回复响应过大。“过大”响应并非总是立即发出，而且可以延迟。WLC上的SNMP调试显示“SNMP：从VlanXXSrParseV1SnmpMessage上的x.x.x.x通过UDP接收的数据包：数据包太大SrDoSnmp: ASN Parse Error”。

最常见受监控OID的表

该表包括一些最常用的对象名称及其OID，考虑的是MIB以非用户友好的语法显示数据：

注意： 命令“show snmp mib 可以使用“ <Object name>”中的|来验证9800 WLC上是否有可用的特定对象名称。

描述

对象名称

OID

预期响应

前5秒的总CPU使用率(%)

cpmCPUTotal5sec

1.3.6.1.4.1.9.9.109.1.1.1.1.3

整数：5

过去1分钟内CPU总使用率(%)

cpmCPUTotal1min

1.3.6.1.4.1.9.9.109.1.1.1.1.4

整数：5

过去5分钟内CPU总使用率(%)

cpmCPUTotal5min

1.3.6.1.4.1.9.9.109.1.1.1.1.5

整数：5

当前使用的内存（字节）

cpmCPUMemoryUsed

1.3.6.1.4.1.9.9.109.1.1.1.1.12

整数：3783236

当前可用内存（字节）

cpmCPUMemoryFree

1.3.6.1.4.1.9.9.109.1.1.1.1.13

整数：4263578

自上次启动以来可用内存的最小量（以字节为单位）

cpmCPUMemoryLowest

1.3.6.1.4.1.9.9.109.1.1.1.1.15

整数：4251212

上次重新加载原因

为什么重新加载

1.3.6.1.4.1.9.2.1.2

字符串：“reload”

所有加入的AP的软件映像

bsnAPSoftwareVersion

1.3.6.1.4.1.14179.2.2.1.1.8

字符串：“17.5.1.12”

所有加入的AP的型号

bsnAPModel

1.3.6.1.4.1.14179.2.2.1.1.16

字符串：“AIR-AP1840I-E-K9”

客户端数量

X

X

X

加入的AP数量

X

X

X

电源设备状态

X

X

X

风扇状态

X

X

X

当前存在支持客户端总数和加入的接入点数中的OID的增强请求：

Cisco Bug ID CSCvu26309 - 9800上不存在客户端计数的SNMP OID

Cisco Bug ID CSCvv44330 - 9800上不存在适用于AP的SNMP OID

在撰写本文时，不支持电源单元(PSU)状态和风扇状态。已打开增强请求：

Cisco Bug ID CSCwa23598 - 9800 WLC增强功能/支持PSU和风扇状态SNMP OID(1.3.6.1.4.1.9.9.13)

HA中的监控备用WLC

要监控高可用性集群中的备用WLC，仅能从版本17.5.1开始。可以通过RMI直接监控备用WLC，也可以通过查询活动WLC监控备用WLC。

直接监控备用WLC

只有在RMI + RP HA类型中运行的WLC才能直接监控备用WLC。它通过备用WLC的备用冗余管理接口(RMI)IP地址完成。

在此场景中，仅IF-MIB中的OID得到正式支持，因此仅可以监控备用WLC上所有接口的状态。9800-CL WLC的输出示例：

描述

对象名称

OID

预期响应

接口名称

ifDescr

1.3.6.1.2.1.2.2.1.2

SNMPv2-SMI::mib-2.2.2.1.2.1 = GigabitEthernet1

SNMPv2-SMI::mib-2.2.2.1.2.2 = GigabitEthernet2

SNMPv2-SMI::mib-2.2.2.1.2.3 = GigabitEthernet3

SNMPv2-SMI::mib-2.2.2.1.2.4 = VoIP-Null0

SNMPv2-SMI::mib-2.2.2.1.2.5 = Null0

SNMPv2-SMI::mib-2.2.2.1.2.6 = Vlan1

SNMPv2-SMI::mib-2.2.2.1.2.7 = Vlan39

接口运行状态(1=up， 2=down)

ifOperStatus

1.3.6.1.2.1.2.2.1.8

SNMPv2-SMI::mib-2.2.2.1.8.1 = 2

SNMPv2-SMI::mib-2.2.2.1.8.2 = 2

SNMPv2-SMI::mib-2.2.2.1.8.3 = 1

SNMPv2-SMI::mib-2.2.2.1.8.4 = 2

SNMPv2-SMI::mib-2.2.2.1.8.5 = 2

SNMPv2-SMI::mib-2.2.2.1.8.6 = 1

注意：备用WLC千兆2端口（用于流量交换的中继端口）预计处于关闭状态。发生故障转移后，备用WLC上的Gig 2端口将启动。9800物理设备（9800-80、9800-40和9800-CL）上的TenGigabit端口也存在类似情况。

通过主用WLC监控备用WLC

还可以通过查询活动WLC来监控备用WLC状态。仅CISCO-LWAPP-HA-MIB和CISCO-PROCESS-MIB MIB受官方支持。当查询HA中的活动WLC时，第一个响应表示活动WLC的值，而第二个响应表示备用WLC的值。

描述

对象名称

OID

预期响应

前5秒的总CPU使用率(%)

cpmCPUTotal5sec

1.3.6.1.4.1.9.9.109.1.1.1.1.3

SNMPv2-SMI::enterprises.9.9.109.1.1.1.1.3.5 = 3

SNMPv2-SMI::enterprises.9.9.109.1.1.1.3.6 = 7

过去1分钟内CPU总使用率(%)

cpmCPUTotal1min

1.3.6.1.4.1.9.9.109.1.1.1.1.4

SNMPv2-SMI::enterprises.9.9.109.1.1.1.1.4.5 = 8

SNMPv2-SMI::enterprises.9.9.109.1.1.1.1.4.6 = 6

过去5分钟内CPU总使用率(%)

cpmCPUTotal5min

1.3.6.1.4.1.9.9.109.1.1.1.1.5

SNMPv2-SMI::enterprises.9.9.109.1.1.1.1.5.5 = 10

SNMPv2-SMI::enterprises.9.9.109.1.1.1.1.5.6 = 15

当前使用的内存（字节）

cpmCPUMemoryUsed

1.3.6.1.4.1.9.9.109.1.1.1.1.12

SNMPv2-SMI::enterprises.9.9.109.1.1.1.12.5 = 4318980

SNMPv2-SMI::enterprises.9.9.109.1.1.1.12.6 = 3950332

当前可用内存（字节）

cpmCPUMemoryFree

1.3.6.1.4.1.9.9.109.1.1.1.1.13

SNMPv2-SMI::enterprises.9.9.109.1.1.1.12.5 = 4318739

SNMPv2-SMI::enterprises.9.9.109.1.1.1.12.6 = 3950738

自上次启动以来可用内存的最小量（以字节为单位）

cpmCPUMemoryLowest

1.3.6.1.4.1.9.9.109.1.1.1.1.15

SNMPv2-SMI::enterprises.9.9.109.1.1.1.15.5 = 3763868

SNMPv2-SMI::enterprises.9.9.109.1.1.1.15.6 = 4132588

备用WLC的状态(1=up， 0=down)

cLHaPeerHotStandbyEvent

1.3.6.1.4.1.9.9.843.1.3.4

SNMPv2-SMI::enterprises.9.9.843.1.3.4.0 = 1