青娉楚,盧淞巖,鄒 紅,姚 朋,陳 蘭
(四川省南充市氣象局,四川 南充 637000)
隨著信息技術在氣象現(xiàn)代化建設中的不斷推進,現(xiàn)代信息技術與氣象業(yè)務結合越來越緊密。氣象業(yè)務服務以及各類氣象數(shù)據(jù)傳輸,離不開信息網(wǎng)絡這個基礎平臺。就目前南充市氣象部門來說,國家自動站、區(qū)域自動氣象站所采集到的資料每5 min向上級部門傳輸一次;土壤水分站、農田小氣候站、大氣成分站等資料每個整點上傳一次;雷達資料每完成一次掃描上傳一次;還涉及到各種預報資料、突發(fā)天氣情況預警信息的傳輸?shù)取S捎跉庀筚Y料傳輸具有較高的時效性要求,氣象信息網(wǎng)絡必須保持全天24 h通暢,在此運行過程中難免會出現(xiàn)通信光纖被市政施工挖斷、突發(fā)雷擊故障、網(wǎng)絡設備老化等不可抗拒原因引起網(wǎng)絡中斷,導致氣象資料正常傳輸受到影響。南充市氣象廣域網(wǎng)路由器到省級、縣級的鏈路采用雙運營商雙MSTP互為備份,如需維持各鏈路24 h運行不中斷,就要求網(wǎng)絡管理人員全天候同時監(jiān)控的鏈路多達27條,如不借助技術手段,那么工作量極大,同時需要消耗大量的人力、物力資源。并且由于人力的局限性,難免會出現(xiàn)一時疏忽,不能保證當網(wǎng)絡出現(xiàn)中斷故障時,能夠第一時間發(fā)現(xiàn)并進行處理維護。
南充市氣象信息網(wǎng)絡監(jiān)控系統(tǒng)的設計,緊密圍繞氣象信息網(wǎng)絡的特有屬性,采用基于J2EE+MySQL+Android設備相配合等技術方法,對南充市氣象信息網(wǎng)絡進行有效實時的監(jiān)控和管理,當網(wǎng)絡中斷后,系統(tǒng)可將故障信息第一時間傳達到信息網(wǎng)絡管理人員,對氣象業(yè)務的運行和發(fā)展有重大意義。
系統(tǒng)采用J2EE+MySQL+Android設備配合、Java編程語言等技術方法,其中J2EE實現(xiàn)業(yè)務邏輯組織并為業(yè)務數(shù)據(jù)提供遠程查詢界面;MySQL提供系統(tǒng)數(shù)據(jù)存儲;Android手機支撐網(wǎng)絡故障報警的實現(xiàn),服務器開發(fā)環(huán)境采用MySQL+Tomact方式。系統(tǒng)運行在一臺服務器上,向多條鏈路對端路由器IP地址不斷發(fā)送ping命令,根據(jù)是否有掉包現(xiàn)象判斷相應網(wǎng)絡鏈路的通暢情況。同時,系統(tǒng)采用Browser/Server結構,使用Web界面作為系統(tǒng)管理平臺,系統(tǒng)管理人員在任意一臺計算機上都能使用瀏覽器進入系統(tǒng)平臺管理查詢頁面,通過鏈路管理、監(jiān)控記錄、統(tǒng)計查詢、報警人員管理等4個主要模塊,實現(xiàn)鏈路監(jiān)控、鏈路增減、鏈路信息編輯、網(wǎng)絡中斷情況統(tǒng)計與查詢、管理人員編輯等操作。
系統(tǒng)主要實現(xiàn)以下功能:①自動監(jiān)控市級到互聯(lián)網(wǎng)、市級到省級、市級到縣級的各條網(wǎng)絡鏈路的通斷情況;②監(jiān)控到任一鏈路斷開超過設定時間,自動對系統(tǒng)設定的相關報警人員進行電話和短信通知報警,鏈路恢復時發(fā)送恢復短信;③通過報警短信能看出具體是哪一條鏈路出現(xiàn)問題;④系統(tǒng)通過手機報警,即使互聯(lián)網(wǎng)斷開,也能將鏈路通斷故障信息第一時間傳送相關人員;⑤可同時通知多個報警人員;⑥系統(tǒng)管理員通過B/S模式,輸入用戶名密碼登錄系統(tǒng)管理頁面;⑦監(jiān)控記錄頁面可查詢對各鏈路斷開次數(shù)、每次持續(xù)時間的記錄信息;⑧在鏈路管理頁面對需要監(jiān)控的鏈路信息進行編輯管理,并能通過操作實現(xiàn)鏈路的添加刪除;⑨在報警人員管理頁面對需要報警提醒的人員相關信息、報警通知電話號碼進行編輯;⑩在統(tǒng)計查詢頁面能以故障發(fā)生時間或鏈路名稱等為條件,對網(wǎng)絡鏈路歷史中斷情況進行統(tǒng)計查詢。
系統(tǒng)功能模塊圖描述如圖1所示,主要分為監(jiān)控模塊、報警模塊、系統(tǒng)Web界面等3大模塊。其中系統(tǒng)Web界面模塊作為系統(tǒng)管理平臺,主要包含鏈路管理、監(jiān)控記錄、統(tǒng)計查詢、報警人員管理等子模塊,實現(xiàn)管理查詢工作。
圖1 系統(tǒng)功能模塊圖Fig.1 The System Function Module Diagram
①監(jiān)控模塊:自動監(jiān)控市級到互聯(lián)網(wǎng)、市級到省級、市級到縣級的電信移動MSTP網(wǎng)絡的鏈路情況,是否發(fā)生中斷。
②報警模塊:當發(fā)現(xiàn)有網(wǎng)絡鏈路中斷時,自動觸發(fā)Android手機對指定人員進行電話和短信報警;鏈路恢復時,觸發(fā)Android手機發(fā)送恢復短信,并將中斷情況記錄在數(shù)據(jù)庫中。
③系統(tǒng)Web界面模塊:系統(tǒng)管理員在任意一臺電腦輸入地址即可訪問系統(tǒng)平臺,輸入用戶名密碼進入系統(tǒng)界面后,通過對鏈路管理、監(jiān)控記錄、統(tǒng)計查詢、報警人員管理4個主要頁面的操作,實現(xiàn)系統(tǒng)管理、查詢等相關工作。其中鏈路管理部分,能夠實現(xiàn)對鏈路的添加、刪除,可對鏈路名稱、鏈路對端IP地址、是否進行監(jiān)控等屬性進行編輯管理,還可實時查看鏈路狀態(tài)。監(jiān)控記錄部分,通過頁面可以訪問系統(tǒng)數(shù)據(jù)庫,能查閱所有網(wǎng)絡鏈路中斷記錄。統(tǒng)計查詢部分,實現(xiàn)以鏈路名稱、鏈路IP地址、查詢時間等作為限定條件對數(shù)據(jù)庫進行訪問,對數(shù)據(jù)庫中所記錄的各條網(wǎng)絡鏈路中斷故障情況實現(xiàn)統(tǒng)計查詢。報警人員管理部分,實現(xiàn)在頁面中增加刪除、添加等操作,協(xié)助需要報警提醒人員的設置,還可以管理及編輯報警人員的相關信息,如電話、姓名等,并根據(jù)人員值班情況調整是否報警。
圖2為系統(tǒng)監(jiān)控與報警功能實現(xiàn)的一個簡略流程。
圖2 自動監(jiān)控與報警功能流程圖Fig.2 The Flow Chart of Automatic Monitoring and Alarm Function
系統(tǒng)每單位時間自動向指定網(wǎng)絡鏈路對端路由器IP地址發(fā)送ping命令進行輪詢:
①當程序判斷出某條網(wǎng)絡鏈路中斷時,繼續(xù)判斷該鏈路之前的狀態(tài)是否為中斷,如果是,則繼續(xù)輪詢;如果不是,則觸發(fā)Android手機程序進行電話和短信報警,然后再繼續(xù)鏈路輪詢。
②當程序判斷出某條網(wǎng)絡鏈路是正常傳輸時,繼續(xù)判斷該鏈路之前的狀態(tài)是否為中斷,如果不是,繼續(xù)輪詢;如果是,則觸發(fā)Android手機程序發(fā)送恢復短信,然后再繼續(xù)輪詢。
系統(tǒng)選用MySQL關系型數(shù)據(jù)庫管理系統(tǒng),建立一個穩(wěn)定的后臺數(shù)據(jù)庫,通過該數(shù)據(jù)庫管理整個網(wǎng)絡自動監(jiān)控與報警系統(tǒng)所需的信息。針對需求,設計的主要數(shù)據(jù)項和數(shù)據(jù)結構如下所示:
①系統(tǒng)管理員信息,包括的數(shù)據(jù)項有:用戶名、密碼等。
②網(wǎng)絡鏈路信息,包括的數(shù)據(jù)項有:鏈路對端路由器IP、鏈路名、鏈路狀態(tài)、是否進行監(jiān)控等。
③鏈路中斷故障記錄信息,包括的數(shù)據(jù)項有:故障編號、鏈路對端路由器IP、鏈路名稱、故障開始時間等。
④報警人員信息,即需要進行報警提醒的人員信息,包括的數(shù)據(jù)項有:編碼、網(wǎng)管姓名、電話號碼、是否通知等。
2.1.1 網(wǎng)絡監(jiān)控時效性控制 為保障各項氣象業(yè)務正常運行,氣象網(wǎng)絡必須要滿足各種氣象資料的傳輸時效性要求。系統(tǒng)利用“cron表達式”設置定時任務,在項目文件src/job.properties中,用cron=0 0/2***設置鏈路每2 min輪詢一次,符合當前氣象數(shù)據(jù)傳輸需求。如以后氣象數(shù)據(jù)傳輸需求發(fā)生變化,可隨時通過對cron表達式進行更改,從而調整鏈路輪詢觸發(fā)的單位時間。
2.1.2 網(wǎng)絡監(jiān)控、報警模塊的實現(xiàn) 由于在網(wǎng)絡運行過程中,難免有偶爾傳輸不穩(wěn)定情況,如果ping某條鏈路只要丟包,就立馬進行鏈路斷線報警,很大概率會出現(xiàn)誤報。故系統(tǒng)采取的方式為:對指定鏈路對端路由器IP地址進行ping命令輪詢時,每次ping對每條鏈路發(fā)送3個包給鏈路對端IP地址,3個包只要有1個包返回,都不算這次ping的過程有掉包,只有返回的包個數(shù)為零時才算作該鏈路這次ping的過程為掉包,當鏈路兩次輪詢都是掉包時,認定為鏈路中斷。按照目前的設置,相當于該鏈路斷線達到4 min才會進行報警。
從實際運行操作來考慮,系統(tǒng)不可能每次認定鏈路中斷都進行報警,即不可能在已知鏈路本身已經(jīng)中斷的情況下,每4 min都報警一次。因此,在系統(tǒng)輪詢判斷某一條鏈路為中斷時,會查看鏈路的前一狀態(tài),如前一狀態(tài)為正常運行,那么系統(tǒng)才會觸發(fā)電話與短信報警;相應的,當系統(tǒng)監(jiān)控到鏈路狀態(tài)恢復正常時,也會對該鏈路前一狀態(tài)進行判斷,若前一狀態(tài)為中斷,那么觸發(fā)鏈路恢復短信的發(fā)送。
圖3為網(wǎng)絡監(jiān)控與報警模塊實現(xiàn)流程圖。從流程圖可以看出,當監(jiān)控系統(tǒng)正常運行,從數(shù)據(jù)庫中獲取各條需要監(jiān)控的鏈路后,向它們發(fā)送ping命令。
圖3 網(wǎng)絡監(jiān)控與報警模塊流程圖Fig.3 The Flow Chart of Network Monitoring and Alarm Module
聲明變量count,獲取host網(wǎng)絡鏈路信息表中的鏈路狀態(tài)HostStatus為count賦值。當系統(tǒng)輪詢到某條鏈路正常時,若count=2,那么說明鏈路之前為斷線,通過host表中獲取到的鏈路信息,編輯恢復短信,向manager報警人員信息表中需要提醒的報警人員發(fā)送恢復短信,并將鏈路狀態(tài)賦值為0,若HostStatus為空,也將其賦值為0,系統(tǒng)繼續(xù)輪詢。
當?shù)?次輪詢到某條鏈路為掉包時,此時獲取到的鏈路狀態(tài)HostStatus給count賦值為0,說明鏈路之前狀態(tài)是通的,這是第1次斷線。把當前故障及時間記錄到pingrecord鏈路中斷故障記錄表中,同時host表中的HostStatus記為1,系統(tǒng)繼續(xù)輪詢。
當?shù)?次輪詢到某條鏈路為掉包時,通過獲取此時鏈路狀態(tài)HostStatus給count賦值為1,得知該鏈路上一次輪詢也為掉包,那么認定為該鏈路中斷,將host表中的HostStatus記為2,向需要提醒的網(wǎng)管人員發(fā)送電話和短信報警提醒,并編輯報警短信,指明中斷鏈路,系統(tǒng)繼續(xù)輪詢。
當再次輪詢到某條鏈路為掉包時,通過獲取此時鏈路狀態(tài)HostStatus給count賦值為2,得知該鏈路已發(fā)送過報警短信,不改變鏈路狀態(tài)值,系統(tǒng)繼續(xù)輪詢。
2.1.3 Android設備報警實現(xiàn) 由于系統(tǒng)承擔著對互聯(lián)網(wǎng)的監(jiān)控任務,故系統(tǒng)未采用微信或網(wǎng)絡電話報警方式。要使系統(tǒng)在互聯(lián)網(wǎng)中斷時,也能完成網(wǎng)絡中斷報警任務,故系統(tǒng)采取手機短信和電話報警。
要實現(xiàn)Android設備的自動報警功能,首先在設備上安裝Android手機APP:PhoneHelper,這是基于Android并用Java作為主要編程語言編寫的APP。
Android設備上的程序除了從設備界面手動點開進行啟動之外,還可以命令行的方式啟動程序。通過這種方式,能讓系統(tǒng)在監(jiān)測到網(wǎng)絡鏈路斷線或恢復時自動觸發(fā)PhoneHelper程序。首先需要用數(shù)據(jù)線把手機和計算機連接起來,然后借助ADB工具連接Android設備進行調試,使用命令行工具am來啟動:adb shell am start-n{包(package)名}/{包名}.{活動(activity)名稱}。系統(tǒng)運行時,要保持Android手機一直連接在服務器USB口,才能實現(xiàn)由系統(tǒng)觸發(fā)手機APP進行電話和短信的通知報警。
由于在實際運行過程中發(fā)現(xiàn),如手機在休眠鎖屏時,通過上述命令沒法自動啟動PhoneHelper程序,故在觸發(fā)手機APP前,會對手機屏幕進行點亮喚醒的操作。示例如下:
if (System.currentTimeMillis()-lastCmdTime>120*1 000){Runtime.getRuntime().exec(String.format("%s shell input keyevent 26",ADB));}
在實際運行時還發(fā)現(xiàn),當多條鏈路同時中斷時,由于程序執(zhí)行速度遠遠快于程序撥打電話號碼的速度,即第1條鏈路的報警電話撥打還未斷線時,第2條鏈路的報警電話又開始啟動撥打,故撥打電話可能出現(xiàn)沖突,所以在系統(tǒng)中,當遇到多條鏈路斷線時,為了避免沖突,默認為1 min撥打1次報警電話。
2.1.4 報警形式 若監(jiān)控到網(wǎng)絡鏈路中斷時,一方面用電話報警的方式讓網(wǎng)管人員能夠第一時間發(fā)現(xiàn)網(wǎng)絡故障,及時進行處理避免影響氣象資料的傳輸時效性和完整性;另一方面還編輯短信詳細告知是哪一條鏈路出現(xiàn)故障,便于網(wǎng)管人員盡快找準處理方向,及時查找問題,有效節(jié)約網(wǎng)絡故障處理時間。
同時,為了節(jié)約人力資源,避免不必要的資源浪費,當系統(tǒng)監(jiān)控監(jiān)控到網(wǎng)絡鏈路恢復時,發(fā)送鏈路恢復短信報警。短信報警內容如圖4所示。
圖4 系統(tǒng)報警短信Fig.4 The Alarm Message of System
由鏈路報警短信“Link to[鏈路名稱],IP[鏈路對端IP地址]went down.”可以清晰明確地看出具體是哪一條或哪幾條鏈路出現(xiàn)鏈路中斷,并且顯示鏈路對端IP地址。
由鏈路恢復短信“Link to[鏈路名稱],IP[鏈路對端IP地址]come back.”同樣可以清晰明確地看出具體是哪一條或哪幾條鏈路已經(jīng)恢復正常,并且顯示鏈路對端IP地址。
在任意一臺電腦的瀏覽器地址欄輸入:http://服務器IP地址:8080/jfinal/login,即可進入系統(tǒng)登錄界面,輸入系統(tǒng)管理員用戶名、密碼進入平臺首頁。菜單欄顯示有鏈路管理、監(jiān)控記錄、統(tǒng)計查詢、報警人員管理4個主要功能,通過這些主要功能頁面實現(xiàn)鏈路監(jiān)控、鏈路增減、鏈路信息編輯、網(wǎng)絡中斷情況統(tǒng)計與查詢、管理人員編輯等操作。
圖5所示為每次鏈路中斷故障的記錄顯示,包括每次故障的開始時間,最后一次未ping通時間和故障持續(xù)時間。
圖5 監(jiān)控記錄Fig.5 The Monitoring Records
圖6所示為統(tǒng)計查詢頁面,默認顯示的是對不同鏈路的中斷故障記錄進行匯總統(tǒng)計的情況,一個對端IP地址產生一條信息。統(tǒng)計要素包括中斷次數(shù)、中斷總時間、每次中斷持續(xù)平均時間。
圖6 統(tǒng)計查詢Fig.6 The Statistical and Query
同時,也可對鏈路故障的統(tǒng)計情況進行查詢。如指定對端IP地址點擊查詢,那么頁面就會顯示鏈路對端為該IP地址對應鏈路的中斷次數(shù)、中斷總時間、每次中斷持續(xù)平均時間;如指定鏈路名稱點擊查詢,那么頁面會顯示該名稱鏈路的中斷次數(shù)、中斷總時間、每次中斷持續(xù)平均時間;或者也可以分別選定起始時間和結束時間,指定時間段查看各鏈路中斷情況的統(tǒng)計數(shù)據(jù)。
經(jīng)過一年半的業(yè)務應用,系統(tǒng)共準確監(jiān)測并及時提供南充市氣象信息網(wǎng)絡斷線報警23次,報警和恢復短信電話均有效實時地傳達到信息網(wǎng)絡管理人員,使相關工作人員及時響應,在盡快時間內處理網(wǎng)絡故障,為氣象資料傳輸?shù)募皶r和完整提供了有效保障。
南充市氣象信息網(wǎng)絡自動監(jiān)控與報警系統(tǒng)的設計與實現(xiàn),為氣象資料傳輸?shù)募皶r性和完整性提供了有效保障。系統(tǒng)可適時發(fā)現(xiàn)網(wǎng)絡鏈路故障,對網(wǎng)絡進行有效實時的監(jiān)控和管理,當網(wǎng)絡出現(xiàn)問題時,可將故障信息第一時間傳達到需要通知維護網(wǎng)絡的報警人員,便于及時準確地處理與查找問題;故障恢復后可發(fā)送恢復短信提醒,避免不必要的人力財力資源浪費,使市級氣象部門的網(wǎng)絡監(jiān)控與維護向更加高效集約和智能智慧的方向發(fā)展,對南充市氣象業(yè)務服務的運行和發(fā)展有重大意義。