張璇, 陳瑛
(上海杉達(dá)學(xué)院 信息科學(xué)與技術(shù)學(xué)院,上海 201209)
存儲區(qū)域網(wǎng)絡(luò)(Storage Area Network,SAN)作為目前應(yīng)用最為廣泛的存儲通道連接技術(shù),核心在于通過FC交換機(jī)連接存儲設(shè)備和服務(wù)器主機(jī),建立用于數(shù)據(jù)存儲的區(qū)域網(wǎng)絡(luò)。隨著SAN被廣泛應(yīng)用于銀行、保險、運營商等企業(yè)的大型數(shù)據(jù)中心生產(chǎn)場景,F(xiàn)C交換機(jī)的自動監(jiān)控和人工干預(yù)技術(shù)始終是運維人員重點關(guān)注的問題之一[1-6]。
在交換機(jī)的監(jiān)控管理領(lǐng)域,使用最廣泛的網(wǎng)絡(luò)監(jiān)控管理協(xié)議是簡單網(wǎng)絡(luò)管理協(xié)議SNMP(Simple Network Management Protocol),其相關(guān)的研究或文獻(xiàn)也屢見不鮮。如趙琳、吳姣等[7]設(shè)計了一套基于SNMP的FC網(wǎng)絡(luò)管理軟件,把FC網(wǎng)絡(luò)上各個節(jié)點和交換機(jī)定義為MIB庫中的實例對象,通過對自擴(kuò)展的網(wǎng)絡(luò)管理信息庫進(jìn)行操作和維護(hù),通過FC網(wǎng)絡(luò)發(fā)送查詢命令以及相應(yīng)回復(fù)判斷網(wǎng)絡(luò)系統(tǒng)狀態(tài),為網(wǎng)絡(luò)管理者提供決策依據(jù);楊明光、張云飛等[8]利用Python語言編程實現(xiàn)了一種基于SNMP協(xié)議的網(wǎng)絡(luò)交換機(jī)狀態(tài)的監(jiān)測系統(tǒng);武韡、石亞軍[9]在Windows平臺上采用MySQL數(shù)據(jù)庫,通過ODBC連接,從底層開發(fā)實現(xiàn)基于SNMP協(xié)議的網(wǎng)絡(luò)預(yù)警系統(tǒng)。
但是對于特定產(chǎn)品如FC交換機(jī),SNMP的監(jiān)控粒度過大,交互能力不足,無法應(yīng)對突發(fā)故障并做出及時響應(yīng)處理。因此,在日常運維中,客戶普遍依賴于各廠家提供的專用工具,或是基于SNMP協(xié)議開發(fā)的第三方集中監(jiān)控平臺。博通(Broadcom)公司旗下的博科(Brocade)系列交換機(jī)(FC Switch)作為目前市場的主流產(chǎn)品,因其可靠性、安全性和高性價比而聞名。然而,受限于Brocade市場推廣策略、培訓(xùn)課程及參考資料的不足,國內(nèi)對于其FC交換技術(shù)及其網(wǎng)絡(luò)設(shè)備應(yīng)用領(lǐng)域的研究并不多見。
本文將以MAPS(Monitoring and Alerting Policy Suite)監(jiān)控策略為切入點,探討博科(Brocade)DCX8510 FC交換機(jī)(Fabric OS 7.4.2a)的自動運維及干預(yù)策略。
博科FC交換機(jī)采用自主研發(fā)的Fabric OS系統(tǒng),自Fabric OS 7.2.0開始,引入了Monitoring and Alerting Policy Suite(MAPS)網(wǎng)絡(luò)監(jiān)控策略。通過這套監(jiān)控策略機(jī)制,系統(tǒng)可以實時獲取硬件狀態(tài)、觸發(fā)錯誤報警,并自動運行各種預(yù)定義的保護(hù)策略[10]。
(1)MAPS可監(jiān)控狀態(tài)
MAPS將其可監(jiān)控的狀態(tài)進(jìn)行歸類,共劃分為11類,如表1所示。
表1 MAPS監(jiān)控狀態(tài)
這些狀態(tài)劃分保證了MAPS對FC交換機(jī)系統(tǒng)各模塊的詳細(xì)監(jiān)測,用戶可以根據(jù)這些監(jiān)測值來設(shè)計不同的策略及應(yīng)對動作,以適應(yīng)各種突發(fā)狀況。
(2)MAPS默認(rèn)策略
監(jiān)控策略(Policy)是針對監(jiān)控對象所定義的一組規(guī)則(Rule)的集合。MAPS默認(rèn)包含3項策略,涵蓋了常用監(jiān)控狀態(tài)及其相應(yīng)閾值,這些默認(rèn)策略按照監(jiān)控強(qiáng)度和閾值靈敏度進(jìn)行劃分,旨在簡化用戶配置流程,以便用戶使用時可以在其基礎(chǔ)上進(jìn)行規(guī)則的自定義。
簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)是目前使用最為廣泛的網(wǎng)絡(luò)管理及設(shè)備通訊協(xié)議,該協(xié)議具有兼容性高、可擴(kuò)展性強(qiáng)、二次開發(fā)度便利等優(yōu)點。同SNMP協(xié)議相比,MAPS存在以下幾點明顯優(yōu)勢。
(1)部署簡單。SNMP采用客戶端服務(wù)器架構(gòu),且需要維護(hù)管理信息庫(MIB)的內(nèi)容。相比之下,MAPS僅需要根據(jù)不同需求創(chuàng)建策略即可。
(2)針對性強(qiáng)。相比于SNMP的廣泛兼容性,MAPS的針對性更強(qiáng),可以完全滿足FC交換機(jī)的日常維護(hù)要求。
(3)故障處理及時。同使用SNMP的監(jiān)控平臺相比,MAPS可以在發(fā)現(xiàn)故障的第一時間實現(xiàn)動作干預(yù),而無需與后臺服務(wù)器進(jìn)行通訊響應(yīng)。
(4)節(jié)約成本。同搭建SNMP監(jiān)控平臺相比,使用MAPS的成本及維護(hù)時間更少。
對于FC交換機(jī)而言,鏈路錯誤(Link Layer Issue)是一類最常見且對用戶影響最大的故障。生產(chǎn)環(huán)境中對于SAN鏈路錯誤的判定和排查,通常有3個判定依據(jù)場景。
(1)對應(yīng)鏈路存在CRC報錯且具有“good_eof”標(biāo)識
(2)對應(yīng)鏈路存在大量ENC_OUT、ITW或Link reset事件
(3)對應(yīng)Port連接的光電轉(zhuǎn)換模塊SFP(Small Form-factor Pluggable)存在發(fā)送/接收功率(RXP/TXP)異常
其中,場景(2)通常依賴于運維人員的經(jīng)驗判斷,而(1)和(2)則可以通過設(shè)計監(jiān)控策略來實現(xiàn)自動運維。本文主要針對(3)即鏈路錯誤中常見的RXP/TXP異常設(shè)計監(jiān)控策略,設(shè)計FC交換機(jī)的自動化運維方案并實現(xiàn)。
本策略主要針對RXP/TXP異常情況處理,通過配置Brocade DCX8510交換機(jī)端口(FC Port)的最大發(fā)送/接收功率的經(jīng)驗閾值,定義“強(qiáng)制停用對應(yīng)端口”(Fence)的應(yīng)對動作(Action)。一旦MAPS監(jiān)控到功率達(dá)到或超過了定義閾值,會自動將對應(yīng)端口設(shè)置為禁用狀態(tài)(Disable),這樣既能夠定位并處置了故障端口,也能避免其他設(shè)備受到故障鏈路的影響。
RXP/TXP異常監(jiān)控策略的設(shè)計思路與流程如圖1所示。
圖1 RXP/TXP異常監(jiān)控策略設(shè)計流程
步驟1:查看系統(tǒng)當(dāng)前監(jiān)控閾值
該步驟的目的在于確定系統(tǒng)MAPS默認(rèn)策略定義的端口最大發(fā)送/接收功率(RXP/TXP)監(jiān)控閾值,并根據(jù)當(dāng)前使用的SFP類型確定合適的監(jiān)控范圍。
系統(tǒng)MAPS默認(rèn)最大發(fā)送、接收功率如圖2、圖3所示。
圖2、圖3說明對于不同速率的SFP模塊系統(tǒng)默認(rèn)的RXP和TXP的監(jiān)控范圍。由于當(dāng)前監(jiān)控閾值范圍過大,遠(yuǎn)遠(yuǎn)大于判定故障的經(jīng)驗值100,因此需要重新進(jìn)行設(shè)置,詳見步驟3。
圖2 系統(tǒng)MAPS默認(rèn)最大發(fā)送功率
圖3 系統(tǒng)MAPS默認(rèn)最大接收功率
步驟2:創(chuàng)建監(jiān)控策略并關(guān)聯(lián)至相應(yīng)對象組
為了更好地對監(jiān)控對象進(jìn)行管理和劃分,MAPS將其監(jiān)控對象進(jìn)行了分組(Group)管理,用戶可以根據(jù)需要創(chuàng)建不同的對象組。對象組具有不同的類型(Type),該類型可以保證組內(nèi)監(jiān)控對象的一致性,避免不同對象混用造成的策略設(shè)計失誤。
查看系統(tǒng)監(jiān)控對象組、關(guān)聯(lián)策略如圖4、圖5所示。
圖4 查看系統(tǒng)監(jiān)控對象組
圖5 查看系統(tǒng)關(guān)聯(lián)策略
在圖4與圖5中,使用logicalgroup——show命令和mapspolicy-show-summary命令列出并查看系統(tǒng)現(xiàn)有的監(jiān)控對象組(Group)及關(guān)聯(lián)策略(Policy),請注意對象組的類型(Type)標(biāo)志了FC交換機(jī)上不同的硬件,如“Port”“Fan”“Power Supply”“WWN”“Sfp”“Blade”“Flash”等,而RXP/TXP監(jiān)控需要將 “Sfp”作為監(jiān)控對象的類型。
步驟3:創(chuàng)建規(guī)則
監(jiān)控策略(Policy)是我們針對監(jiān)控對象所定義的一組規(guī)則(Rule)集合。對象組(Group)創(chuàng)建后我們可以將其與設(shè)計好的監(jiān)控策略(Policy)進(jìn)行關(guān)聯(lián)。為了監(jiān)控最大發(fā)送/接收功率(RXP/TXP),需要分別創(chuàng)建LowRXP和LowTXP兩條規(guī)則,其采樣監(jiān)測間隔為1小時且該值無法修改,規(guī)則觸發(fā)后的應(yīng)對動作(Action)為強(qiáng)制停用對應(yīng)端口(Fence)并將其加入到對應(yīng)策略(Policy)中。
1.LowRXP規(guī)則的創(chuàng)建過程如下。
(1)判定條件:RXP<100時發(fā)送SNMP trap。
(2)監(jiān)控策略:copy_dflt_moderate_policy,采樣監(jiān)測間隔為1小時且該值無法修改,規(guī)則觸發(fā)后的應(yīng)對動作(Action)為強(qiáng)制停用對應(yīng)端口(Fence)。
(3)配置命令:
DCX:FID128:admin> mapsrule--create LowRXP-monitor RXP-group ALL_SFP-op l-value 100-action fence-policy copy_dflt_moderate_policy
Rule has been created but policy is not present.
2.LowTXP規(guī)則的創(chuàng)建過程如下。
(1)判定條件:TXP<100時發(fā)送SNMP trap。
(2)監(jiān)控策略:copy_dflt_moderate_policy,采樣監(jiān)測間隔為1小時且該值無法修改,規(guī)則觸發(fā)后的應(yīng)對動作(Action)為強(qiáng)制停用對應(yīng)端口(Fence)。
(3)配置命令:
DCX:FID128:admin> mapsrule--create LowTXP-monitor TXP-group ALL_SFP-op l-value 100-action fence-policy copy_dflt_moderate_policy
Rule has been created but policy is not present.
步驟4:將步驟3規(guī)則導(dǎo)入新策略并啟用
上述規(guī)則創(chuàng)建后會出現(xiàn)系統(tǒng)提示“Rule has been created but policy is not present”,說明規(guī)則已經(jīng)創(chuàng)建但是策略尚未啟用,因此需要使用下列命令啟用該策略。
DCX:FID128:admin> mapspolicy--enable < copy_dflt_moderate_policy >
規(guī)則和策略創(chuàng)建完成后需要進(jìn)行可用性測試,如測試出現(xiàn)異??墒褂萌缦旅钸M(jìn)行刪除回退操作。
DCX:FID128:admin> mapsrule--delete LowRXP
DCX:FID128: admin> mapsrule--delete LowTXP
2.2針對發(fā)送/接收功率(RXP/TXP)異常情況定義的動作為“強(qiáng)制停用對應(yīng)端口”,即“Fence”應(yīng)對動作。事實上,除了“Fence”“Decommissioning”等針對不同平臺及監(jiān)控對象定義的10余種應(yīng)對動作外,MAPS還可以自定義全局應(yīng)對動作。
使用mapsconfig--actions raslog,snmp,email,sfp_margina命令和mapsconfig--show命令可以添加并驗證全局MAPS應(yīng)對動作,如圖6所示。
圖6 添加并驗證全局MAPS應(yīng)對動作
特別需要注意的是,全局MAPS應(yīng)對動作的優(yōu)先級要高于規(guī)則中定義的應(yīng)對動作,一旦兩者產(chǎn)生沖突,系統(tǒng)會按照全局動作的設(shè)置來進(jìn)行應(yīng)對動作。
除了以上通過設(shè)置MAPS監(jiān)控策略實現(xiàn)系統(tǒng)自動運維外,MAPS還預(yù)留了與第三方監(jiān)控平臺的通訊接口,將所有的監(jiān)控信息利用SNMP協(xié)議或郵件文本發(fā)送給第三方監(jiān)控平臺,幫助相關(guān)人員在統(tǒng)一平臺下完成決策及維護(hù)。
SNMP的網(wǎng)絡(luò)管理由3部分組成,即SNMP本身、管理信息結(jié)構(gòu)SMI(Structure of Management Information)和管理信息庫MIB(Management Information Base)。SNMP定義了管理站和代理之間所交換的分組格式。SMI定義了命名對象和定義對象類型的通用規(guī)則,以及把對象和對象的值進(jìn)行編碼的規(guī)則。MIB在被管理的實體中創(chuàng)建了對象并規(guī)定了其類型。即SMI建立規(guī)則,MIB對變量進(jìn)行說明,而SNMP完成網(wǎng)管的動作[11]。在MAPS設(shè)計中,每個MAPS Trap都定義了問題嚴(yán)重級別并包含在MAPS Config Severity Level變量中,如圖7所示。
圖7 MAPS Traps定義的變量名示意
MAPS Severity Level包含的嚴(yán)重程度級別有“None”“Critical”“Error”“Warings”“Informational”“Debug”幾種,通?!癈ritical”和“Error”表明出現(xiàn)較為嚴(yán)重的硬件錯誤,需要人工干預(yù),如圖8所示。
圖8 MAPS SeverityLevel
第三方監(jiān)控平臺可通過SNMP Trap實時抓取數(shù)據(jù)并進(jìn)行響應(yīng),預(yù)警信息通過郵件組進(jìn)行轉(zhuǎn)發(fā),可以自動關(guān)聯(lián)到短信網(wǎng)關(guān)通知到運維人員。首先,SNMP Trap接口接收含有OID 與MIB值的字符串;然后,利用MAPS的MIB庫文件,將字符串翻譯成明文;最后,經(jīng)過判斷找出帶有Critical或Error字段的明文,發(fā)送短信。過程如圖9所示。
圖9 MAPS與第三方監(jiān)控平臺交互設(shè)計流程
發(fā)送的MAPS短信范例如圖10所示。
圖10 短信內(nèi)容范例
利用Python語言設(shè)計MAPS與第三方監(jiān)控平臺交互接口的偽代碼如下。
(1)使用snmp trap 接口接收oid與mib值
cg = cmdgen.CommandGenerator()#獲取CommandGenerator對象
errorIndication, errorStatus, errorIndex, varBinds = cg.getCmd
(
0代表SNMPv1版本,1代表SNMPv2c版本
cmdgen.CommunityData('myagent', 'public', 1),
cmdgen.UdpTransportTarget(('127.0.0.1', 161)), #傳輸通道
'.1.3.6.1.2.1.1.1.0'#傳送的OID
)
print(str(varBinds[0][1]))#varBinds返回MIB值及獲得值
(2)使用mib查看器翻譯成明文
# Assemble MIB viewer
mibBuilder = builder.MibBuilder()
compiler.addMibCompiler(mibBuilder, sources=['file:///usr/share/snmp/mibs','http://mibs.test.com/test/@mib@'])
mibViewController = view.MibViewController(mibBuilder)
# Pre-load MIB modules we expect to work with
mibBuilder.loadModules('SNMPv2-MIB', 'SNMP-COMMUNITY-MIB')#mib文件的配置
# This is what we can get in TRAP PDU
varBinds =[
('1.3.6.1.2.1.1.3.0', 12345),
('1.3.6.1.6.3.1.1.4.1.0', '1.3.6.1.6.3.1.1.5.2'),
('1.3.6.1.6.3.18.1.3.0', '0.0.0.0'),
('1.3.6.1.6.3.18.1.4.0', ''),
('1.3.6.1.6.3.1.1.4.3.0', '1.3.6.1.4.1.20408.4.1.1.2'),
('1.3.6.1.2.1.1.1.0', 'my system')
]
(3)通過對每一次接收的oid翻譯,通過varBins所獲得的mid值判斷帶有critical或error字段
text = '#oid翻譯明文
for varBind in varBinds:
a = 0
test = varBind[1].prettyPrint()
text = text + test + ' '
if 'critical' in test:
a = 1
elif 'CRITICAL' in test:
a = 1
elif 'error' in test:
a = 1
elif 'ERROR' in test:
a = 1
(4)根據(jù)a 的值來決定是否發(fā)送短信
from twilio.rest import Client
# Your Account SID from twilio.com/console
account_sid = "your account sid"
# Your Auth Token from twilio.com/console
auth_token = "your token"
client = Client(account_sid, auth_token)
message = client.messages.create(
# 這里中國的號碼前面需要加86
to="+接收者的號碼",
from_="+twilio給你的號碼 ",
body="text")
print(message.sid)
print(call.sid)
# 發(fā)送到短信網(wǎng)關(guān)實現(xiàn)報警
本文提出了一種基于博科(Brocade)MAPS(Monitoring and Alerting Policy Suite)監(jiān)控策略實現(xiàn)FC交換機(jī)自動運維的方案,詳細(xì)介紹了MAPS監(jiān)控策略的創(chuàng)建、定義、關(guān)聯(lián)及測試回退過程,并嘗試?yán)肧NMP Trap接口,將MAPS預(yù)警消息同第三方監(jiān)控平臺整合,提供了一種交互報警、人工干預(yù)的設(shè)計思路。本設(shè)計方案旨在盡可能節(jié)約資金與人力成本的前提下,充分利用交換機(jī)的現(xiàn)有機(jī)制,及時發(fā)現(xiàn)并自動處理常見交換機(jī)故障,為自動化運維工程提供了新的研究方向。