简介
本文档介绍如何配置简单网络管理协议(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种安全模式可用:
- AuthPriv =对消息进行身份验证和加密
- AuthNoPriv =消息经过身份验证,但未加密
- 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 |