青娉楚,盧淞巖,鄒 紅,姚 朋,陳 蘭
(四川省南充市氣象局,四川 南充 637000)
隨著信息技術在氣象現代化建設中的不斷推進,現代信息技術與氣象業務結合越來越緊密。氣象業務服務以及各類氣象數據傳輸,離不開信息網絡這個基礎平臺。就目前南充市氣象部門來說,國家自動站、區域自動氣象站所采集到的資料每5 min向上級部門傳輸一次;土壤水分站、農田小氣候站、大氣成分站等資料每個整點上傳一次;雷達資料每完成一次掃描上傳一次;還涉及到各種預報資料、突發天氣情況預警信息的傳輸等。由于氣象資料傳輸具有較高的時效性要求,氣象信息網絡必須保持全天24 h通暢,在此運行過程中難免會出現通信光纖被市政施工挖斷、突發雷擊故障、網絡設備老化等不可抗拒原因引起網絡中斷,導致氣象資料正常傳輸受到影響。南充市氣象廣域網路由器到省級、縣級的鏈路采用雙運營商雙MSTP互為備份,如需維持各鏈路24 h運行不中斷,就要求網絡管理人員全天候同時監控的鏈路多達27條,如不借助技術手段,那么工作量極大,同時需要消耗大量的人力、物力資源。并且由于人力的局限性,難免會出現一時疏忽,不能保證當網絡出現中斷故障時,能夠第一時間發現并進行處理維護。
南充市氣象信息網絡監控系統的設計,緊密圍繞氣象信息網絡的特有屬性,采用基于J2EE+MySQL+Android設備相配合等技術方法,對南充市氣象信息網絡進行有效實時的監控和管理,當網絡中斷后,系統可將故障信息第一時間傳達到信息網絡管理人員,對氣象業務的運行和發展有重大意義。
系統采用J2EE+MySQL+Android設備配合、Java編程語言等技術方法,其中J2EE實現業務邏輯組織并為業務數據提供遠程查詢界面;MySQL提供系統數據存儲;Android手機支撐網絡故障報警的實現,服務器開發環境采用MySQL+Tomact方式。系統運行在一臺服務器上,向多條鏈路對端路由器IP地址不斷發送ping命令,根據是否有掉包現象判斷相應網絡鏈路的通暢情況。同時,系統采用Browser/Server結構,使用Web界面作為系統管理平臺,系統管理人員在任意一臺計算機上都能使用瀏覽器進入系統平臺管理查詢頁面,通過鏈路管理、監控記錄、統計查詢、報警人員管理等4個主要模塊,實現鏈路監控、鏈路增減、鏈路信息編輯、網絡中斷情況統計與查詢、管理人員編輯等操作。
系統主要實現以下功能:①自動監控市級到互聯網、市級到省級、市級到縣級的各條網絡鏈路的通斷情況;②監控到任一鏈路斷開超過設定時間,自動對系統設定的相關報警人員進行電話和短信通知報警,鏈路恢復時發送恢復短信;③通過報警短信能看出具體是哪一條鏈路出現問題;④系統通過手機報警,即使互聯網斷開,也能將鏈路通斷故障信息第一時間傳送相關人員;⑤可同時通知多個報警人員;⑥系統管理員通過B/S模式,輸入用戶名密碼登錄系統管理頁面;⑦監控記錄頁面可查詢對各鏈路斷開次數、每次持續時間的記錄信息;⑧在鏈路管理頁面對需要監控的鏈路信息進行編輯管理,并能通過操作實現鏈路的添加刪除;⑨在報警人員管理頁面對需要報警提醒的人員相關信息、報警通知電話號碼進行編輯;⑩在統計查詢頁面能以故障發生時間或鏈路名稱等為條件,對網絡鏈路歷史中斷情況進行統計查詢。
系統功能模塊圖描述如圖1所示,主要分為監控模塊、報警模塊、系統Web界面等3大模塊。其中系統Web界面模塊作為系統管理平臺,主要包含鏈路管理、監控記錄、統計查詢、報警人員管理等子模塊,實現管理查詢工作。

圖1 系統功能模塊圖Fig.1 The System Function Module Diagram
①監控模塊:自動監控市級到互聯網、市級到省級、市級到縣級的電信移動MSTP網絡的鏈路情況,是否發生中斷。
②報警模塊:當發現有網絡鏈路中斷時,自動觸發Android手機對指定人員進行電話和短信報警;鏈路恢復時,觸發Android手機發送恢復短信,并將中斷情況記錄在數據庫中。
③系統Web界面模塊:系統管理員在任意一臺電腦輸入地址即可訪問系統平臺,輸入用戶名密碼進入系統界面后,通過對鏈路管理、監控記錄、統計查詢、報警人員管理4個主要頁面的操作,實現系統管理、查詢等相關工作。其中鏈路管理部分,能夠實現對鏈路的添加、刪除,可對鏈路名稱、鏈路對端IP地址、是否進行監控等屬性進行編輯管理,還可實時查看鏈路狀態。監控記錄部分,通過頁面可以訪問系統數據庫,能查閱所有網絡鏈路中斷記錄。統計查詢部分,實現以鏈路名稱、鏈路IP地址、查詢時間等作為限定條件對數據庫進行訪問,對數據庫中所記錄的各條網絡鏈路中斷故障情況實現統計查詢。報警人員管理部分,實現在頁面中增加刪除、添加等操作,協助需要報警提醒人員的設置,還可以管理及編輯報警人員的相關信息,如電話、姓名等,并根據人員值班情況調整是否報警。
圖2為系統監控與報警功能實現的一個簡略流程。

圖2 自動監控與報警功能流程圖Fig.2 The Flow Chart of Automatic Monitoring and Alarm Function
系統每單位時間自動向指定網絡鏈路對端路由器IP地址發送ping命令進行輪詢:
①當程序判斷出某條網絡鏈路中斷時,繼續判斷該鏈路之前的狀態是否為中斷,如果是,則繼續輪詢;如果不是,則觸發Android手機程序進行電話和短信報警,然后再繼續鏈路輪詢。
②當程序判斷出某條網絡鏈路是正常傳輸時,繼續判斷該鏈路之前的狀態是否為中斷,如果不是,繼續輪詢;如果是,則觸發Android手機程序發送恢復短信,然后再繼續輪詢。
系統選用MySQL關系型數據庫管理系統,建立一個穩定的后臺數據庫,通過該數據庫管理整個網絡自動監控與報警系統所需的信息。針對需求,設計的主要數據項和數據結構如下所示:
①系統管理員信息,包括的數據項有:用戶名、密碼等。
②網絡鏈路信息,包括的數據項有:鏈路對端路由器IP、鏈路名、鏈路狀態、是否進行監控等。
③鏈路中斷故障記錄信息,包括的數據項有:故障編號、鏈路對端路由器IP、鏈路名稱、故障開始時間等。
④報警人員信息,即需要進行報警提醒的人員信息,包括的數據項有:編碼、網管姓名、電話號碼、是否通知等。
2.1.1 網絡監控時效性控制 為保障各項氣象業務正常運行,氣象網絡必須要滿足各種氣象資料的傳輸時效性要求。系統利用“cron表達式”設置定時任務,在項目文件src/job.properties中,用cron=0 0/2***設置鏈路每2 min輪詢一次,符合當前氣象數據傳輸需求。如以后氣象數據傳輸需求發生變化,可隨時通過對cron表達式進行更改,從而調整鏈路輪詢觸發的單位時間。
2.1.2 網絡監控、報警模塊的實現 由于在網絡運行過程中,難免有偶爾傳輸不穩定情況,如果ping某條鏈路只要丟包,就立馬進行鏈路斷線報警,很大概率會出現誤報。故系統采取的方式為:對指定鏈路對端路由器IP地址進行ping命令輪詢時,每次ping對每條鏈路發送3個包給鏈路對端IP地址,3個包只要有1個包返回,都不算這次ping的過程有掉包,只有返回的包個數為零時才算作該鏈路這次ping的過程為掉包,當鏈路兩次輪詢都是掉包時,認定為鏈路中斷。按照目前的設置,相當于該鏈路斷線達到4 min才會進行報警。
從實際運行操作來考慮,系統不可能每次認定鏈路中斷都進行報警,即不可能在已知鏈路本身已經中斷的情況下,每4 min都報警一次。因此,在系統輪詢判斷某一條鏈路為中斷時,會查看鏈路的前一狀態,如前一狀態為正常運行,那么系統才會觸發電話與短信報警;相應的,當系統監控到鏈路狀態恢復正常時,也會對該鏈路前一狀態進行判斷,若前一狀態為中斷,那么觸發鏈路恢復短信的發送。
圖3為網絡監控與報警模塊實現流程圖。從流程圖可以看出,當監控系統正常運行,從數據庫中獲取各條需要監控的鏈路后,向它們發送ping命令。

圖3 網絡監控與報警模塊流程圖Fig.3 The Flow Chart of Network Monitoring and Alarm Module
聲明變量count,獲取host網絡鏈路信息表中的鏈路狀態HostStatus為count賦值。當系統輪詢到某條鏈路正常時,若count=2,那么說明鏈路之前為斷線,通過host表中獲取到的鏈路信息,編輯恢復短信,向manager報警人員信息表中需要提醒的報警人員發送恢復短信,并將鏈路狀態賦值為0,若HostStatus為空,也將其賦值為0,系統繼續輪詢。
當第1次輪詢到某條鏈路為掉包時,此時獲取到的鏈路狀態HostStatus給count賦值為0,說明鏈路之前狀態是通的,這是第1次斷線。把當前故障及時間記錄到pingrecord鏈路中斷故障記錄表中,同時host表中的HostStatus記為1,系統繼續輪詢。
當第2次輪詢到某條鏈路為掉包時,通過獲取此時鏈路狀態HostStatus給count賦值為1,得知該鏈路上一次輪詢也為掉包,那么認定為該鏈路中斷,將host表中的HostStatus記為2,向需要提醒的網管人員發送電話和短信報警提醒,并編輯報警短信,指明中斷鏈路,系統繼續輪詢。
當再次輪詢到某條鏈路為掉包時,通過獲取此時鏈路狀態HostStatus給count賦值為2,得知該鏈路已發送過報警短信,不改變鏈路狀態值,系統繼續輪詢。
2.1.3 Android設備報警實現 由于系統承擔著對互聯網的監控任務,故系統未采用微信或網絡電話報警方式。要使系統在互聯網中斷時,也能完成網絡中斷報警任務,故系統采取手機短信和電話報警。
要實現Android設備的自動報警功能,首先在設備上安裝Android手機APP:PhoneHelper,這是基于Android并用Java作為主要編程語言編寫的APP。
Android設備上的程序除了從設備界面手動點開進行啟動之外,還可以命令行的方式啟動程序。通過這種方式,能讓系統在監測到網絡鏈路斷線或恢復時自動觸發PhoneHelper程序。首先需要用數據線把手機和計算機連接起來,然后借助ADB工具連接Android設備進行調試,使用命令行工具am來啟動:adb shell am start-n{包(package)名}/{包名}.{活動(activity)名稱}。系統運行時,要保持Android手機一直連接在服務器USB口,才能實現由系統觸發手機APP進行電話和短信的通知報警。
由于在實際運行過程中發現,如手機在休眠鎖屏時,通過上述命令沒法自動啟動PhoneHelper程序,故在觸發手機APP前,會對手機屏幕進行點亮喚醒的操作。示例如下:
if (System.currentTimeMillis()-lastCmdTime>120*1 000){Runtime.getRuntime().exec(String.format("%s shell input keyevent 26",ADB));}
在實際運行時還發現,當多條鏈路同時中斷時,由于程序執行速度遠遠快于程序撥打電話號碼的速度,即第1條鏈路的報警電話撥打還未斷線時,第2條鏈路的報警電話又開始啟動撥打,故撥打電話可能出現沖突,所以在系統中,當遇到多條鏈路斷線時,為了避免沖突,默認為1 min撥打1次報警電話。
2.1.4 報警形式 若監控到網絡鏈路中斷時,一方面用電話報警的方式讓網管人員能夠第一時間發現網絡故障,及時進行處理避免影響氣象資料的傳輸時效性和完整性;另一方面還編輯短信詳細告知是哪一條鏈路出現故障,便于網管人員盡快找準處理方向,及時查找問題,有效節約網絡故障處理時間。
同時,為了節約人力資源,避免不必要的資源浪費,當系統監控監控到網絡鏈路恢復時,發送鏈路恢復短信報警。短信報警內容如圖4所示。

圖4 系統報警短信Fig.4 The Alarm Message of System
由鏈路報警短信“Link to[鏈路名稱],IP[鏈路對端IP地址]went down.”可以清晰明確地看出具體是哪一條或哪幾條鏈路出現鏈路中斷,并且顯示鏈路對端IP地址。
由鏈路恢復短信“Link to[鏈路名稱],IP[鏈路對端IP地址]come back.”同樣可以清晰明確地看出具體是哪一條或哪幾條鏈路已經恢復正常,并且顯示鏈路對端IP地址。
在任意一臺電腦的瀏覽器地址欄輸入:http://服務器IP地址:8080/jfinal/login,即可進入系統登錄界面,輸入系統管理員用戶名、密碼進入平臺首頁。菜單欄顯示有鏈路管理、監控記錄、統計查詢、報警人員管理4個主要功能,通過這些主要功能頁面實現鏈路監控、鏈路增減、鏈路信息編輯、網絡中斷情況統計與查詢、管理人員編輯等操作。
圖5所示為每次鏈路中斷故障的記錄顯示,包括每次故障的開始時間,最后一次未ping通時間和故障持續時間。

圖5 監控記錄Fig.5 The Monitoring Records
圖6所示為統計查詢頁面,默認顯示的是對不同鏈路的中斷故障記錄進行匯總統計的情況,一個對端IP地址產生一條信息。統計要素包括中斷次數、中斷總時間、每次中斷持續平均時間。

圖6 統計查詢Fig.6 The Statistical and Query
同時,也可對鏈路故障的統計情況進行查詢。如指定對端IP地址點擊查詢,那么頁面就會顯示鏈路對端為該IP地址對應鏈路的中斷次數、中斷總時間、每次中斷持續平均時間;如指定鏈路名稱點擊查詢,那么頁面會顯示該名稱鏈路的中斷次數、中斷總時間、每次中斷持續平均時間;或者也可以分別選定起始時間和結束時間,指定時間段查看各鏈路中斷情況的統計數據。
經過一年半的業務應用,系統共準確監測并及時提供南充市氣象信息網絡斷線報警23次,報警和恢復短信電話均有效實時地傳達到信息網絡管理人員,使相關工作人員及時響應,在盡快時間內處理網絡故障,為氣象資料傳輸的及時和完整提供了有效保障。
南充市氣象信息網絡自動監控與報警系統的設計與實現,為氣象資料傳輸的及時性和完整性提供了有效保障。系統可適時發現網絡鏈路故障,對網絡進行有效實時的監控和管理,當網絡出現問題時,可將故障信息第一時間傳達到需要通知維護網絡的報警人員,便于及時準確地處理與查找問題;故障恢復后可發送恢復短信提醒,避免不必要的人力財力資源浪費,使市級氣象部門的網絡監控與維護向更加高效集約和智能智慧的方向發展,對南充市氣象業務服務的運行和發展有重大意義。