顏 偉,張 超
(曲阜師范大學(xué)網(wǎng)絡(luò)信息中心,山東 曲阜 273165)
隨著互聯(lián)網(wǎng)及其應(yīng)用的飛速發(fā)展,新技術(shù)不斷涌現(xiàn),高校校園網(wǎng)作為多種網(wǎng)絡(luò)接入的先行試點(diǎn),為數(shù)字化校園、信息化系統(tǒng)建設(shè)提供了契機(jī),在一定程度上引領(lǐng)了網(wǎng)絡(luò)的發(fā)展,提升自身競(jìng)爭(zhēng)力和對(duì)外形象。這對(duì)校園網(wǎng)的通暢運(yùn)行也提出了更高的要求。一旦出現(xiàn)斷網(wǎng)情況,及時(shí)定位故障點(diǎn)和故障類型對(duì)于恢復(fù)網(wǎng)絡(luò)暢通尤其重要。
傳統(tǒng)的網(wǎng)絡(luò)運(yùn)維方式多為人工處置方式,判斷網(wǎng)絡(luò)設(shè)備問題多是依據(jù)個(gè)人經(jīng)驗(yàn),存在工作效率低,不能準(zhǔn)確定位故障,網(wǎng)絡(luò)恢復(fù)時(shí)間長(zhǎng)等現(xiàn)象。隨著校園網(wǎng)絡(luò)的不斷發(fā)展、建設(shè),網(wǎng)絡(luò)應(yīng)用和結(jié)構(gòu)日益復(fù)雜,傳統(tǒng)的網(wǎng)絡(luò)運(yùn)維方式已經(jīng)無法滿足運(yùn)維的要求,亟需一款通用的、可查看末端設(shè)備網(wǎng)絡(luò)狀態(tài)、精確定位網(wǎng)絡(luò)故障并可遠(yuǎn)程快速判斷故障原因的應(yīng)用系統(tǒng)進(jìn)行支撐。而將 Python 設(shè)計(jì)語言應(yīng)用于網(wǎng)絡(luò)運(yùn)維之中可以提高運(yùn)維效率,降低運(yùn)維成本。
本系統(tǒng)的設(shè)計(jì)初衷即要求系統(tǒng)要具有跨平臺(tái)特征、易實(shí)現(xiàn)、開發(fā)效率高和簡(jiǎn)單部署,因此選擇了目前在最流行的Python語言作為實(shí)現(xiàn)工具。同時(shí)為了避免頻繁登錄交換機(jī)影響設(shè)備運(yùn)行,通過SNMP協(xié)議來獲取交換機(jī)的各種參數(shù)數(shù)據(jù)。
Python作為使用率上升最快的面向?qū)ο缶幊陶Z言,具有簡(jiǎn)單易用、開發(fā)效率高、兼容性好、可擴(kuò)展性好等特點(diǎn),并且擁有功能強(qiáng)大、豐富的庫(kù)資源,廣泛應(yīng)用于人工智能、大數(shù)據(jù)、物聯(lián)網(wǎng)等新型領(lǐng)域。本系統(tǒng)采用成熟穩(wěn)定的Python 2.7版本實(shí)現(xiàn)服務(wù)器端程序代碼。
為了便于部署和方便用戶使用,使用開源項(xiàng)目web.py作為系統(tǒng)的開發(fā)框架。
web.py 內(nèi)置了web服務(wù)器,相當(dāng)?shù)男∏?、?jiǎn)單,歸屬于輕量級(jí)的web框架,但功能強(qiáng)大,而且使用起來簡(jiǎn)單、直接。
SNMP,簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(Simple Network Management Protocol),是已經(jīng)投入使用的工業(yè)標(biāo)準(zhǔn),它屬于 TCP/IP 協(xié)議中的應(yīng)用層協(xié)議。SNMP 主要用于網(wǎng)絡(luò)設(shè)備的管理。由于 SNMP 協(xié)議簡(jiǎn)單可靠,受到了眾多廠商的歡迎,成為了目前最為廣泛的網(wǎng)管協(xié)議。
SNMP協(xié)議,一般基于UDP傳輸,目前版本是v3版本,提供了認(rèn)證和加密安全機(jī)制。SNMP一般主要由網(wǎng)絡(luò)設(shè)備、Agent和管理組件構(gòu)成,其中Agent組件是網(wǎng)絡(luò)設(shè)備和管理組件的中間件,是駐留在網(wǎng)絡(luò)設(shè)備中的程序進(jìn)程,它收集設(shè)備的管理信息并與管理組件交互。SNMP對(duì)外提供了三種用于控制MIB對(duì)象的基本操作命令,它們是:Get、Set 和 Trap,可以查詢?cè)O(shè)備信息、修改設(shè)備的參數(shù)值、監(jiān)控設(shè)備狀態(tài)、自動(dòng)發(fā)現(xiàn)網(wǎng)絡(luò)故障、生成報(bào)告等。本系統(tǒng)在Ubuntu Server系統(tǒng)上使用Python的Pysnmp模塊部署了相應(yīng)服務(wù)。
MIB庫(kù),全稱Management Information Base,相當(dāng)于數(shù)據(jù)庫(kù)。存儲(chǔ)了被監(jiān)控設(shè)備的各種參數(shù)和狀態(tài)信息等。每個(gè)被管理的設(shè)備都需要有MIB庫(kù)的存在,我們才能對(duì)設(shè)備進(jìn)行管理。
MIB庫(kù)中定義了可訪問的網(wǎng)絡(luò)設(shè)備及其屬性,通過OID(Object IDentifier,對(duì)象標(biāo)識(shí)符,唯一標(biāo)識(shí)一個(gè)MIB對(duì)象),Object Identifer來區(qū)別。MIB采用分級(jí)樹形結(jié)構(gòu),結(jié)構(gòu)類似于DNS,以下是結(jié)構(gòu)圖:
網(wǎng)絡(luò)設(shè)備的各個(gè)相關(guān)配置、數(shù)據(jù)等描述,均由OID來標(biāo)識(shí)。通過從MIB樹的根部進(jìn)行遍歷,可以獲取整個(gè)網(wǎng)絡(luò)設(shè)備所管理的對(duì)象的值或描述。如圖1所示,1.3.6.1.2.1就代表iso.org.dod.internet.mgmt.mib。
圖1 MIB組織結(jié)構(gòu)圖
實(shí)際工作中,當(dāng)某個(gè)樓宇的用戶提交報(bào)修請(qǐng)求時(shí),一般先登錄該樓宇交換機(jī),然后查看交換機(jī)上聯(lián)端口是否正常,再根據(jù)用戶的房間號(hào)查找該用戶對(duì)應(yīng)的端口,并檢查端口的各種狀態(tài)信息,這個(gè)過程通過命令行實(shí)現(xiàn),比較費(fèi)時(shí),結(jié)果展示不友好,工作效率低。
因此從實(shí)際工作出發(fā),為了提高工作效率和減少故障定位時(shí)間,當(dāng)某個(gè)樓宇的用戶提出報(bào)修請(qǐng)求時(shí),工作人員無論在何時(shí)何地都可以直接通過瀏覽器打開系統(tǒng)首頁(yè),選擇相應(yīng)的樓宇,實(shí)時(shí)獲取該樓宇交換機(jī)的所有端口的詳細(xì)狀態(tài)信息,并以不同的顏色對(duì)端口狀態(tài)進(jìn)行標(biāo)識(shí),同時(shí)把整個(gè)交換機(jī)的所有端口狀態(tài)都在一個(gè)頁(yè)面中展示,使得結(jié)果一目了然,信息展示清晰直觀,端口狀態(tài)對(duì)比明顯,極大的提高了故障處理效率。系統(tǒng)流程如圖2所示。
圖2 系統(tǒng)流程圖
本系統(tǒng)采用B/S結(jié)構(gòu),使用web.py作為框架。前端使用html5+CSS實(shí)現(xiàn)頁(yè)面效果和布局控制,后端使用Python+SNMP協(xié)議通過交換機(jī)管理IP登錄相應(yīng)的交換機(jī),實(shí)時(shí)獲取交換機(jī)的啟動(dòng)時(shí)間、工作狀態(tài)等數(shù)據(jù),生成靜態(tài)頁(yè)面推送至前端發(fā)布,用戶通過任意聯(lián)網(wǎng)終端使用瀏覽器即可方便實(shí)時(shí)查看所選交換機(jī)設(shè)備及端口工作狀態(tài)等數(shù)據(jù)。系統(tǒng)架構(gòu)如圖3所示。
圖3 系統(tǒng)架構(gòu)圖
對(duì)交換機(jī)進(jìn)行監(jiān)控,主要是監(jiān)控交換機(jī)的端口流量、狀態(tài)、交換機(jī)啟動(dòng)時(shí)間、CPU使用率、內(nèi)存狀態(tài)等,關(guān)鍵是找出與之相對(duì)應(yīng)的OID。OID的獲取比較容易,一般設(shè)備廠商都有相應(yīng)的文件提供下載。通過下載的MIB文件,查找出需要的狀態(tài)對(duì)應(yīng)的OID,然后讀取設(shè)備的OID數(shù)據(jù)即可。本系統(tǒng)中訪問的設(shè)備都是銳捷的交換機(jī),對(duì)應(yīng)的OID表如表1所示。
而另外一些參數(shù)MIB中沒有直接對(duì)應(yīng)的OID數(shù)據(jù),例如端口5分鐘內(nèi)吞吐量等,為了獲取這部分?jǐn)?shù)據(jù),我們使用Python的Telnetlib模塊,通過自動(dòng)化腳本遠(yuǎn)程訪問交換機(jī),來獲取這些數(shù)據(jù)。
表1 系統(tǒng)相關(guān)的OID列表
因篇幅原因,僅貼出部分代碼。
本系統(tǒng)基于Python2.7.12和Pysnmp4.2.5實(shí)現(xiàn),使用web.py3.0作為web框架,硬件配置為:
CPU:Intel Core i5-6600 CPU @ 3.9GH
RAM:11945MiB
軟件環(huán)境為:
操作系統(tǒng):Ubuntu 16.04 xenial或windows2008 R2
內(nèi)核:x86_64 Linux 4.4.0-154-generic
可以看出,本系統(tǒng)對(duì)軟硬件配置要求低,普通計(jì)算機(jī)即可承擔(dān)。系統(tǒng)使用簡(jiǎn)單,不需要對(duì)系統(tǒng)環(huán)境進(jìn)行任何配置,只需在后臺(tái)通過一條命令即可啟動(dòng)服務(wù)器端程序并綁定端口號(hào),啟動(dòng)后客戶端即可通過瀏覽器進(jìn)行訪問。系統(tǒng)的主頁(yè)面如圖4所示。
圖4 系統(tǒng)主界面
首先通過以下界面提交樓宇交換機(jī)信息,如圖5所示。
圖5 客戶端選擇樓宇
提交之后系統(tǒng)實(shí)時(shí)反應(yīng),以靜態(tài)網(wǎng)頁(yè)的形式展示當(dāng)前交換機(jī)的各種狀態(tài)信息。如圖6所示。
以筆者本單位的所有樓宇交換機(jī)為實(shí)驗(yàn)對(duì)象對(duì)本系統(tǒng)進(jìn)行了測(cè)試,結(jié)果表明,本系統(tǒng)都能在規(guī)定的時(shí)間內(nèi)獲取到對(duì)應(yīng)交換機(jī)的狀態(tài)信息,大大縮短了用戶故障的處理時(shí)間,提高了工作效率,同時(shí)根據(jù)各個(gè)端口的數(shù)據(jù)比對(duì),對(duì)流量過大的端口上用戶及時(shí)發(fā)出預(yù)警信息,降低了設(shè)備的故障率。
圖6 系統(tǒng)運(yùn)行界面
目前用于網(wǎng)絡(luò)應(yīng)用系統(tǒng)監(jiān)控的軟件比較多,多以通用軟件的形式出現(xiàn),而且大多配置復(fù)雜,跨平臺(tái)性和可移植性差,無法滿足用戶的個(gè)性化需求。而有的系統(tǒng)比較龐大,需要單獨(dú)占用一臺(tái)硬件設(shè)備作為系統(tǒng)運(yùn)行的平臺(tái),造成資源浪費(fèi)。比如MRTG(Multi Router Traffic Grapher,MRTG),主要監(jiān)控網(wǎng)絡(luò)鏈路流量負(fù)載,也就是只對(duì)交換機(jī)的上行端口流量進(jìn)行監(jiān)控,而對(duì)于其他下行狀態(tài)等參數(shù)卻無法展示給用戶。而Cacti系統(tǒng)雖然可以監(jiān)控多種設(shè)備,但是系統(tǒng)龐大,安裝、配置復(fù)雜。
相當(dāng)于其他功能類似的監(jiān)控系統(tǒng),本系統(tǒng)也是基于snmp協(xié)議實(shí)現(xiàn)對(duì)交換機(jī)的訪問,本系統(tǒng)的優(yōu)點(diǎn)在于,系統(tǒng)實(shí)現(xiàn)架構(gòu)簡(jiǎn)單,文件結(jié)構(gòu)清晰,軟件小巧,目前整個(gè)系統(tǒng)大約3MB,非常方便進(jìn)行系統(tǒng)部署和遷移。系統(tǒng)基于由python和web.py實(shí)現(xiàn),所以具有良好的跨平臺(tái)特征,在windows和linux下測(cè)試都獲得成功。同時(shí)因?yàn)橄到y(tǒng)小巧,對(duì)平臺(tái)的要求不高,不需要單獨(dú)占用整臺(tái)服務(wù)器資源,節(jié)省了資金費(fèi)用。本系統(tǒng)監(jiān)控整個(gè)交換機(jī)的所有上行端口和下行端口狀態(tài)和參數(shù),且同頁(yè)顯示。更重要的是,本系統(tǒng)立足于實(shí)際,需求從日常的網(wǎng)絡(luò)維護(hù)工作中提出,目的是解決日常工作中的交換機(jī)故障,能夠滿足個(gè)性化需求,屬于定制開發(fā),更能解決實(shí)際工作中遇到的問題。
本系統(tǒng)通過Python與SNMP的完美結(jié)合,實(shí)現(xiàn)了實(shí)時(shí)獲取特定樓宇交換機(jī)啟動(dòng)時(shí)間、資源使用率、端口狀態(tài)、端口流量以及端口當(dāng)前下聯(lián)設(shè)備的MAC地址,展示效果清晰直觀,用戶使用簡(jiǎn)單方便。當(dāng)有校園網(wǎng)用戶反映網(wǎng)絡(luò)問題時(shí),管理人員根據(jù)以上數(shù)據(jù)可以實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)故障進(jìn)行精確定位和類型判斷,大大減輕了管理人員的工作量,縮短了故障定位時(shí)間,提高了定位精度和故障處理效率,提升了網(wǎng)絡(luò)服務(wù)形象、管理效率和服務(wù)水平,也極大改善了用戶的上網(wǎng)體驗(yàn)。通過規(guī)范化、流程化和標(biāo)準(zhǔn)化的服務(wù),極大地提高了故障應(yīng)急處理能力。
為了擴(kuò)展系統(tǒng)功能,實(shí)現(xiàn)對(duì)交換機(jī)的更加高效、方便管理,下一步將增加交換機(jī)端口的遠(yuǎn)程管理功能,同時(shí)利用python強(qiáng)大的數(shù)據(jù)分析和處理功能,持續(xù)獲取所管理交換機(jī)的工作狀態(tài)的實(shí)時(shí)數(shù)據(jù),對(duì)交換機(jī)在不同時(shí)間段內(nèi)的工作狀態(tài)和性能進(jìn)行跟蹤,從而支持網(wǎng)絡(luò)管理人員校園網(wǎng)規(guī)劃方案和帶寬管理策略,最大限度發(fā)揮交換機(jī)的性能,提高校園網(wǎng)的使用效率。同時(shí)增加端口重啟功能和交換機(jī)端口流量異常增加預(yù)警功能,配置SMTP服務(wù)器的郵件提醒和SMS短信平臺(tái)監(jiān)測(cè)提醒服務(wù),當(dāng)交換機(jī)等末端設(shè)備掉電時(shí),管理人員會(huì)收到郵件或短信通知,預(yù)判問題,爭(zhēng)取在終端用戶無感知的情況下盡早解決問題,更好的做好服務(wù)工作,保障校園網(wǎng)絡(luò)的實(shí)時(shí)暢通,為數(shù)字化校園、智慧校園、教學(xué)信息化做好支撐工作。