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