簡介
本文說明如何設定簡易網路管理通訊協定(SNMP)以監控Cisco 9800無線LAN控制器(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供舊版使用。某些資訊可以獨佔用於遙測,而以前在AireOS上可用的一些OID在9800上尚不可用。
在WLC上設定SNMP
Cisco Catalyst 9800系列無線控制器支援Cisco IOS XE Bengaluru 17.6.1乙太網服務埠(管理介面VRF/GigabitEthernet 0)。
在此版本之前,只能使用SNMP透過其無線管理介面或備援管理介面來監控Catalyst 9800 WLC(如果版本17.5.1及更高版本上的HA叢集中有待命WLC)。
通過Web介面
SNMPv2c是基於社群的SNMP版本,並且裝置之間的所有通訊都是明文的。SNMPv3是最安全的版本,它提供對資料包的消息完整性檢查、身份驗證和加密。SNMPv1已經非常過時,但仍能提供傳統軟體的相容性。這篇文章沒有提到這一點。
重要信息:預設情況下,SNMPv2c啟用,社群為「private」,具有讀+寫許可權,社群為「public」,具有只讀許可權。建議刪除這些社群並使用其他名稱建立新社群。
登入9800 WLC的Web介面。在Administration > Management > SNMP下,確保全域性啟用SNMP。在Community Strings下,將顯示所有當前配置的社群及其許可權級別:
建立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,該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安裝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 Infrastructure能夠輕鬆監控和設定多個網路裝置,包括無線控制器。
Prime Infrastructure已預先載入所有OID,且與WLC的整合僅包含將WLC憑證新增到Prime中。由於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錯誤ID CSCvv07486的影響 — 由於SNMP請求過大,無法在WLC中同步接入點。當CUCM運行受影響的版本並且WLC具有10個以上接入點時,會觸發此問題。由於CUCM在單個批次請求中查詢大量OID的方式不正確,WLC拒絕應答或響應過大而過。「過大」響應並非總是立即發出,而且可能會被延遲。WLC上的SNMP調試顯示「SNMP:通過UDP從VlanXXSrParseV1SnmpMessage上的x.x.x.x接收的資料包: packlet過大SrDoSnmp: ASN分析錯誤」。
最常見受監控OID的表
該表包括一些最常用的對象名稱及其OID,考慮了MIB以非使用者友好語法顯示資料:
附註: 命令「show snmp mib 「|in <Object name>」可用於驗證9800 WLC上是否有可用的特定對象名稱。
說明 |
對象名稱 |
OID |
預期響應 |
總CPU使用率(以過去5秒的百分比為單位) |
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的軟體映像 |
bsnAPSsoftwareVersion |
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錯誤ID CSCvu26309 - 9800上不存在客戶端計數的SNMP OID
Cisco錯誤ID CSCvv44330 - 9800上不存在AP的SNMP OID
在撰寫本文時,不支援電源單元(PSU)的狀態和風扇狀態。已開啟增強請求:
思科漏洞ID CSCwa23598 - 9800 WLC增強功能/對PSU和風扇狀態SNMP OID(1.3.6.1.4.1.9.9.13)的支援
在HA中監控待命WLC
從17.5.1版開始,只能在高可用性群集中監視備用WLC。待命WLC可以直接透過RMI監控,也可以透過作用中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 Gig 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 |
預期響應 |
總CPU使用率(以過去5秒的百分比為單位) |
cpmCPUTotal5sec |
1.3.6.1.4.1.9.9.109.1.1.1.1.3 |
SNMPv2-SMI::enterprises.9.9.109.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.4.5 = 8 SNMPv2-SMI::enterprises.9.9.109.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.5.5 = 10 SNMPv2-SMI::enterprises.9.9.109.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 |