丁青,范磬亞,俞海平,張義東,吉翔
隨著校園網(wǎng)支撐的業(yè)務越來越廣泛,網(wǎng)絡負荷變得越來越重,網(wǎng)絡在運行過程中經(jīng)常會出現(xiàn)不可預知的突發(fā)故障。如果不能及時獲知消息、排除故障,有可能會造成網(wǎng)絡性能變差甚至引發(fā)網(wǎng)絡大面積癱瘓。校園網(wǎng)的骨干和中心是核心通信設(shè)備與提供核心業(yè)務的服務器[1],它們是校園網(wǎng)正常運轉(zhuǎn)的基礎(chǔ)。只要能確保它們的正常運行,就能夠保證整個網(wǎng)絡不出大的問題。
而隨著移動通信技術(shù)的迅速發(fā)展,作為移動通信的一種重要增值業(yè)務的SMS(短消息服務)也得到了迅速的發(fā)展。在校園信息化的建設(shè)過程中,短信功能的應用逐步扮演著越來越重要的作用,積極地推動著校園信息化的快速發(fā)展?;谶@樣的思想,我們自主開發(fā)了一套校園網(wǎng)自動監(jiān)控報警系統(tǒng)。這套系統(tǒng)對網(wǎng)絡中的核心設(shè)備和服務器加以實時監(jiān)控,如果發(fā)現(xiàn)運行故障,立即通過短消息方式向網(wǎng)絡管理員報警,網(wǎng)絡管理員收到報警后及時采取措施排除故障,從而確保網(wǎng)絡通暢和數(shù)據(jù)安全[2]。
圖1 總體結(jié)構(gòu)
校園網(wǎng)自動監(jiān)控報警系統(tǒng)的總體結(jié)構(gòu)如圖1所示,整個系統(tǒng)按功能劃分,分為設(shè)備監(jiān)控模塊、短消息收發(fā)模塊和系統(tǒng)集成模塊。設(shè)備監(jiān)控模塊根據(jù)相關(guān)網(wǎng)絡管理協(xié)議實時監(jiān)控連接到校園網(wǎng)的所有路由器、交換機、服務器以及 UPS等關(guān)鍵設(shè)備。短消息收發(fā)模塊通過RS232連接GSM模塊,實現(xiàn)短消息報警功能,一旦發(fā)現(xiàn)網(wǎng)絡故障,則立即將報警信息通過GPRS網(wǎng)絡發(fā)送到網(wǎng)管員手機。系統(tǒng)集成模塊則是系統(tǒng)頂層模塊,每隔一定的時間,通過調(diào)用設(shè)備監(jiān)控模塊輪詢網(wǎng)絡設(shè)備,如果發(fā)現(xiàn)設(shè)備故障,則調(diào)用短消息收發(fā)模塊向網(wǎng)管員報警,另外由于采用B/S架構(gòu),網(wǎng)管員桌面可以在校園網(wǎng)任意授權(quán)節(jié)點連接系統(tǒng)所在服務器,通過瀏覽器查看設(shè)備狀態(tài)并對系統(tǒng)進行相關(guān)配置。
按軟硬件劃分,該系統(tǒng)分為軟件和硬件兩部分。軟件部分整體采用.NET技術(shù)來實現(xiàn),后臺數(shù)據(jù)庫為SQL Server,軟件開發(fā)工具采用了Visual Studio.Net平臺,軟件運行環(huán)境為 Windows 2003 Server。硬件部分選用的 GSM 模塊是Wavecom的Q2304A,支持AT指令集收發(fā)短消息。
系統(tǒng)由三大功能模塊組成,分為設(shè)備監(jiān)控模塊、短消息收發(fā)模塊、系統(tǒng)集成模塊,它們都基于微軟公司的.NET Framework 來實現(xiàn)。
網(wǎng)絡設(shè)備的監(jiān)控主要依據(jù)相關(guān)的網(wǎng)絡管理協(xié)議來進行,常用的有因特網(wǎng)報文管理協(xié)議(ICMP)和簡單網(wǎng)絡管理協(xié)議(SNMP)。ICMP是IP層的標準協(xié)議,它允許主機或路由器報告差錯情況和提供有關(guān)異常情況的報告[4]。目前的設(shè)備監(jiān)控模塊實現(xiàn)了最基本的連通性檢測,主要采用基于ICMP的Ping服務來實現(xiàn)。
基于面向?qū)ο蟮脑O(shè)計方法,設(shè)備監(jiān)控模塊被定義成一個類名為DevMon的類,它所包含的成員方法主要是靜態(tài)的基于各種網(wǎng)絡管理協(xié)議的檢測函數(shù)。連通性檢測的函數(shù)定義為public static Boolean ICMP_PING(string DevIpAddr),關(guān)鍵代碼如下:
首先新生成Ping類對象PingSender,然后設(shè)置Ping服務相關(guān)參數(shù)(禁止數(shù)據(jù)包分段、生成包含32個字節(jié)發(fā)送數(shù)據(jù)的緩沖區(qū)和設(shè)置超時時間為480毫秒),接著調(diào)用同步方法Send向目標IP地址發(fā)送ICMP回聲報文,最后根據(jù)應答結(jié)果來決定返回值為真或假。
GSM模塊能夠支持所有GSM短消息通訊功能,主要包括中心號碼設(shè)置、消息模式配置、發(fā)送、接收和刪除等,上位機則通過發(fā)送相應的AT指令來控制GSM模塊進行相關(guān)操作[5]。短消息收發(fā)模塊同樣被設(shè)計成一個類名為GsmSMS的類,它通過對AT指令進行封裝實現(xiàn)了短消息通訊相關(guān)的主要功能。
2.2.1 UML圖
圖2 GsmSMS類的UML圖
GsmSMS類的UML圖如圖2所示,這里列出了最主要的成員變量和成員函數(shù)。私有成員變量 rs232是 SerialPort類對象,SerialPort借助rs232可以方便的實現(xiàn)串口相關(guān)操作。公有的成員函數(shù)一共有五個:GsmInit用于初始化GSM 模塊,GsmSendSMS用于發(fā)送短消息,GsmReadSMS用于閱讀短消息,GsmSetSMSC用于設(shè)置短消息中心號碼,GsmDeleteSMS用于刪除短消息。
2.2.2 成員函數(shù)的實現(xiàn)
成員函數(shù)的實現(xiàn)都依據(jù)相關(guān)的AT指令[6],如表1所示。
表1 相關(guān)AT指令
以 GSM 模塊初始化(GsmInit)和發(fā)送短消息(GsmSendSMS)為例,介紹 GsmSMS類成員函數(shù)的具體實現(xiàn)。
圖3 GsmInit和GsmSendSMS的流程圖
GsmInit的其程序流程圖如圖3中(a)所示。首先根據(jù)輸入?yún)?shù)(串口名、波特率、奇偶校驗、數(shù)據(jù)長度和停止位)來創(chuàng)建SerialPort類對象,接著調(diào)用SerialPort類方法Open()打開串口,然后通過串口向GSM模塊發(fā)送“AT”查詢模塊的狀態(tài),如果模塊處于活動狀態(tài),則進一步發(fā)送“AT+CGMF=1”配置短消息為文本模式,如果配置成功,則初始化成功并返回TRUE。
GsmSendSMS的程序流程圖如圖3中(b)所示。首先利用發(fā)送短消息 AT指令發(fā)送對方號碼,接收到“>”提示符后,再發(fā)送短消息內(nèi)容,然后等待直到返回包含“ERROR”或“CMGS”的響應,如果返回“CMGS”則表示發(fā)送成功,如果返回“ERROR”則表示發(fā)送失敗。
系統(tǒng)集成模塊是整個系統(tǒng)的運轉(zhuǎn)調(diào)度中心,通過該中心實現(xiàn)了對網(wǎng)絡的實時監(jiān)控。首先是系統(tǒng)初始化:初始化GSM模塊,連接后臺數(shù)據(jù)庫獲知監(jiān)控設(shè)備列表以及網(wǎng)管員名單,并根據(jù)輸入?yún)?shù)配置運行參數(shù)。然后進行定時批量監(jiān)控,定時對位于監(jiān)控設(shè)備列表上的每個設(shè)備調(diào)用設(shè)備監(jiān)控模塊加以檢測并記錄結(jié)果。最后,如果發(fā)現(xiàn)設(shè)備故障,則根據(jù)一定的報警策略向網(wǎng)管員手機發(fā)送報警信息。
2.3.1 UML圖
系統(tǒng)集成模塊相關(guān)的UML圖如圖4所示。
圖4 MonAlarm類的UML圖
其中MonDev結(jié)構(gòu)用于保存設(shè)備信息和狀態(tài),ID、Type、Location和 IPAddr分別對應監(jiān)控設(shè)備的名稱、類型、位置和IP地址,直接來源于數(shù)據(jù)庫;Status則表明設(shè)備是否正常工作,AlarmFlag則標志是否已經(jīng)報警,AlarmCount則記錄設(shè)備報警次數(shù)。
MonAlarm類實現(xiàn)整個系統(tǒng)集成,其成員變量一共有6個:mdlist為所有受監(jiān)控設(shè)備對應的 MonDev結(jié)構(gòu)列表,devalarm_limit為單個設(shè)備報警的次數(shù)限制,allalarm_limit為所有報警的次數(shù)限制,allalarmcount則是所有報警計數(shù)值,montimer是基于.NET的 Timer類的監(jiān)控定時器,sms_agent則是GsmSMS類對象。
MonAlarm成員函數(shù)一共包括5個。公有 的Init 用于執(zhí)行系統(tǒng)初始化,通過sms_agent調(diào)用GsmInit初始化GSM模塊;連接數(shù)據(jù)庫生成 mdlist并對 Status、AlarmFlag和AlarmCount進行初始化,分別設(shè)置成True、False和0;此外,初始化allalarmcount為0 ,并根據(jù)輸入?yún)?shù)配置用于限制報警次數(shù)的 devalarm_limit和 allalarm_limit。SetTimer用于配置監(jiān)控定時器,參數(shù)interval表示秒為單位定時間隔,參數(shù)enable決定是否啟動或停止監(jiān)控定時器。MonAll實施監(jiān)控批處理,針對mdlist中每個設(shè)備調(diào)用DevMon類的監(jiān)控函數(shù),并根據(jù)結(jié)果更新Status。SMSAlarm則在實施監(jiān)控之后根據(jù)mdlist中的狀態(tài)信息,再依據(jù)一定的報警策略決定是否通過sms_agent來發(fā)送報警信息。OnTimedEvent則是定時器事件函數(shù),包含整個監(jiān)控報警流程,先調(diào)用 MonAll,然后再調(diào)用SMSAlarm。需要說明的是,MonAlarm類的mdlist公有成員變量,它能夠被外部直接訪問,從而可以方便的在Web頁中顯示所有監(jiān)控情況。
2.3.2 系統(tǒng)報警策略
短消息報警能夠提高管理效率,但也會帶來一些成本開銷。因此,在保證報警有效性的情況下,如何設(shè)計報警策略來盡可能的降低成本,是系統(tǒng)很需要考慮的問題。首先要避免重復報警,只有當監(jiān)控到設(shè)備從正常狀態(tài)(Status=True)變?yōu)榉钦顟B(tài)(Status=False)時,才發(fā)送短消息報警。其次要控制設(shè)備的報警次數(shù),對單個設(shè)備的報警次數(shù) AlarmCount需要加以限制,避免設(shè)備出現(xiàn)時好時壞的情況時反復報警 ;此外,對系統(tǒng)總共的報警次數(shù) allalarmcount也應該加以限制,避免由于系統(tǒng)所在服務器本身和網(wǎng)絡斷開而大量報警的情況。
上述報警策略集成在成員函數(shù)SMSAlarm中,實現(xiàn)流程圖如圖5所示。另外,由于系統(tǒng)對報警次加了限制,每報警一次,設(shè)備和系統(tǒng)所允許的報警次數(shù)都會各減少一次,因而在網(wǎng)管員收到報警并手動排除故障之后,需要再次調(diào)用Init執(zhí)行系統(tǒng)初始化。
圖5 報警策略流程圖
本文介紹的校園網(wǎng)自動監(jiān)控報警系統(tǒng)目前已在本院網(wǎng)絡中心投入運行,為網(wǎng)管員發(fā)現(xiàn)、排除網(wǎng)絡故障和確保網(wǎng)絡正常運行發(fā)揮了重要的作用。下一步的工作,主要是考慮采用更為專業(yè)的網(wǎng)管協(xié)議來監(jiān)控網(wǎng)絡設(shè)備,特別是對于重要的服務器,除了基本的連通性檢測,對于流量、服務、安全等方面的監(jiān)控也非常重要,通過加強對各種安全隱患的提前預警,進而做到防患于未然。
[1]何發(fā)鎂等.嵌入式網(wǎng)絡管理報警系統(tǒng)的設(shè)計[J].計算機工程,2007,(20):101-103.
[2]張杰等.基于嵌入式系統(tǒng)的網(wǎng)絡故障檢測報警系統(tǒng)[J].內(nèi)蒙古大學學報(自然科學版),2009,(3):356-359.
[3]金旭亮.編程的奧秘——.NET軟件技術(shù)學習與實踐[M].北京:電子工業(yè)出版社,2006-1 .
[4]謝希仁.計算機網(wǎng)絡教程[M].北京:人民郵電出版社.2006-5.
[5]謝春祥等.基于 GSM/GPRS的終端式短信平臺開發(fā)[J].計算機工程和設(shè)計,2007,(4):1680-1682.
[6]郭輝.基于GSM SMS的短信平臺及其應用系統(tǒng)的設(shè)計與實現(xiàn)[D].南京:東南大學,2006:15-16.