徐浩彬,趙 亮,徐碧裕,葉朗明
(1.江門市新會區(qū)氣象局,廣東新會 529100;2.隴縣氣象局,陜西隴縣 721200;3.江門市氣象局,廣東江門 529000)
隨著氣象事業(yè)的發(fā)展,縣級氣象探測儀器設(shè)備數(shù)量及種類日趨增加,確保探測設(shè)備正常高效運(yùn)行,是提供優(yōu)質(zhì)氣象服務(wù)的前提和保證。但與日俱增的探測儀器使設(shè)備維護(hù)人員的監(jiān)控及維護(hù)壓力倍增,人工監(jiān)控儀器設(shè)備的運(yùn)行狀態(tài)任務(wù)更加繁重。為了及時準(zhǔn)確地監(jiān)控氣象區(qū)域站數(shù)據(jù),緩解監(jiān)控人員的工作壓力,李峰等[1]對綜合氣象觀測運(yùn)行監(jiān)控業(yè)務(wù)現(xiàn)狀的分析,提出了運(yùn)行監(jiān)控業(yè)務(wù)的發(fā)展設(shè)想。孟珍等[2]以"三級管理"的組織結(jié)構(gòu)建立了氣象探測設(shè)備運(yùn)行監(jiān)控與評估體系。張潔等[3]開始探索云計(jì)算環(huán)境下氣象大數(shù)據(jù)服務(wù)的應(yīng)用研究,以期通過云計(jì)算環(huán)境提升整體氣象業(yè)務(wù)服務(wù)水平。龍亞星等[4]構(gòu)建了由觀測資料指標(biāo)等組成的自動氣象站網(wǎng)監(jiān)控指標(biāo)體系并給出了目標(biāo)值。李源鴻及江崟等[5-6]在省級及市級層面探索并設(shè)計(jì)了氣象監(jiān)測綜合業(yè)務(wù)平臺。齊軍岐[7]根據(jù)陜西省大探中心提供的128例自動站設(shè)備故障案例,將故障發(fā)生原因分為6類。王麗玫等[8]基于省級氣象寬帶網(wǎng),建設(shè)開發(fā)集約型信息網(wǎng)絡(luò)運(yùn)行管理監(jiān)控業(yè)務(wù)系統(tǒng)。王建莊、鐘少君等[9-10]運(yùn)用不同的技術(shù)路線完成了氣象自動站數(shù)據(jù)監(jiān)控平臺的設(shè)計(jì)開發(fā)工作。邸永強(qiáng)等[11]基于GSM短信技術(shù)路線開發(fā)了自動氣象站資料傳輸監(jiān)控平臺,提高了業(yè)務(wù)可用性。林月蘭等[12]應(yīng)用氣象數(shù)據(jù)監(jiān)控系統(tǒng),有效減少氣象數(shù)據(jù)缺測。
為了嘗試提高臺站設(shè)備維護(hù)及時率及緩解人工監(jiān)控區(qū)域站運(yùn)行狀態(tài)的壓力,本文根據(jù)縣級臺站實(shí)際需要,提出了一種便于實(shí)現(xiàn)、穩(wěn)定可靠的區(qū)域站實(shí)時監(jiān)控解決方案。該系統(tǒng)應(yīng)用PHP程序,采用定時任務(wù)執(zhí)行方式,調(diào)取廣東省氣象探測數(shù)據(jù)中心區(qū)域站數(shù)據(jù),根據(jù)各站數(shù)據(jù)到報情況將缺報站點(diǎn)進(jìn)行記錄,通過郵件通知臺站維護(hù)人員,以期達(dá)到縮短響應(yīng)時間和及時處理故障的目的。
新會區(qū)氣象局通過對臺站現(xiàn)有人員和業(yè)務(wù)計(jì)算資源的分析,在不增加人員運(yùn)維壓力及業(yè)務(wù)系統(tǒng)便于使用的條件下,形成了一套應(yīng)用云平臺的區(qū)域站實(shí)時監(jiān)控系統(tǒng)。系統(tǒng)由3大功能模塊構(gòu)成:區(qū)域站數(shù)據(jù)的定時下載及推送、氣象數(shù)據(jù)的實(shí)時監(jiān)控、通知消息提示告警服務(wù)。數(shù)據(jù)按順序流轉(zhuǎn)至各功能模塊,實(shí)現(xiàn)了對區(qū)域站數(shù)據(jù)來報情況的實(shí)時監(jiān)控?;谏鲜鰳I(yè)務(wù)需求,新會區(qū)氣象局選用了新浪云平臺以搭建氣象數(shù)據(jù)實(shí)時監(jiān)控系統(tǒng)。
新浪云應(yīng)用:新浪云是基于PaaS(Platform-as-a-Service)模式的分布式Web應(yīng)用/業(yè)務(wù)開發(fā)托管、運(yùn)行平臺,其提供了包括數(shù)據(jù)庫、存儲與CDN、應(yīng)用程序、網(wǎng)絡(luò)與安全、通訊等一整套服務(wù)產(chǎn)品。因其具有所見即所得的程序開發(fā)及部署環(huán)境,可以快速實(shí)現(xiàn)核心業(yè)務(wù)上線運(yùn)行,同時無需過多考慮服務(wù)器運(yùn)維管理,可大幅縮減運(yùn)行維護(hù)的人力物力資源,運(yùn)維成本低,架構(gòu)精簡輕量,便于臺站自行搭建和廣泛應(yīng)用,適合縣級氣象部門業(yè)務(wù)系統(tǒng)的部署應(yīng)用。
KVDB存儲:KVDB是新浪云開發(fā)的分布式key-value數(shù)據(jù)存儲服務(wù),用來支持公有云平臺上的海量key-value存儲。KVDB支持100GB的存儲空間,可支持1 000 000 000條記錄,高性能高可靠存儲,采用無狀態(tài)對等的分布式架構(gòu),在任一節(jié)點(diǎn)發(fā)生故障時,仍可保持正常運(yùn)行。由于其具有穩(wěn)定高性能的存儲能力,適合氣象等行業(yè)的數(shù)據(jù)應(yīng)用。
系統(tǒng)由三個模塊組成:一是原始實(shí)況數(shù)據(jù)下載及推送;二是數(shù)據(jù)的實(shí)時監(jiān)控;三是通知消息提示告警服務(wù)。其架構(gòu)如圖1所示。
總體設(shè)計(jì)思路由以下三個部分組成。
(1)原始數(shù)據(jù)下載及推送由本地計(jì)算機(jī)執(zhí)行,通過Windows計(jì)劃任務(wù),每五分鐘執(zhí)行預(yù)編寫的腳本程序進(jìn)行下載,已獲取的數(shù)據(jù)文件通過FTP方式傳輸至外網(wǎng)服務(wù)器。傳送至外網(wǎng)服務(wù)器的區(qū)域站數(shù)據(jù)文件以JSON格式保存成文本文件,且每五分鐘覆蓋重寫生成最新數(shù)據(jù)文件。由于直接調(diào)取區(qū)域站的實(shí)況數(shù)據(jù),新增站點(diǎn)可以便捷納入監(jiān)控范圍。
(2)區(qū)域站數(shù)據(jù)監(jiān)控是整個系統(tǒng)的核心,該程序部署在新浪云平臺。通過調(diào)用新浪云計(jì)劃任務(wù),執(zhí)行區(qū)域站數(shù)據(jù)檢查程序。如區(qū)域站數(shù)據(jù)文件中有站點(diǎn)缺測,則將該站點(diǎn)標(biāo)記為數(shù)據(jù)缺測1次,且在新浪云KVDB存儲器中保存(僅保存缺測次數(shù),不保存站點(diǎn)原始?xì)庀髷?shù)據(jù))。當(dāng)KVDB存儲器中對應(yīng)站點(diǎn)的缺測標(biāo)記為5時,表明數(shù)據(jù)已缺測20分鐘,同時達(dá)到監(jiān)控閾值,該站點(diǎn)缺測標(biāo)記將流轉(zhuǎn)至信息告警服務(wù)程序。
(3)當(dāng)數(shù)據(jù)缺測達(dá)到監(jiān)控閾值時,將啟用通知消息提示告警服務(wù),通過郵件方式將該站點(diǎn)的缺測情況發(fā)送至預(yù)設(shè)郵箱,以提醒值班人員查看站點(diǎn)故障情況。為了避免重復(fù)多次發(fā)送提醒郵件,當(dāng)缺測標(biāo)記大于閾值時即關(guān)閉該站點(diǎn)的提醒發(fā)送功能;若該站點(diǎn)恢復(fù)正常,缺測標(biāo)記將被清零,檢查程序?qū)⑦M(jìn)入新的循環(huán),繼續(xù)監(jiān)控?cái)?shù)據(jù)來報情況。
圖1 氣象數(shù)據(jù)監(jiān)控服務(wù)架構(gòu)圖
數(shù)據(jù)下載程序使用PHP: Hypertext Preprocessor語言5.3版本進(jìn)行服務(wù)程序開發(fā),每五分鐘調(diào)用廣東省氣象探測數(shù)據(jù)中心區(qū)域站數(shù)據(jù)接口獲取相關(guān)數(shù)據(jù),并以JSON格式保存。
核心代碼如下:
$station =array("XXXXX",……,"XXXXX");
for($i=0;$i<=41;$i++){
$url = "http://172.22.1.175/di/http.action?userId=******&pwd=******&interfaceId=getAwst5MRain4Iiiii&dataFormat=json&iiiii=".$station[$i]."&ymdhms=".$data_time."00";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data_temp = curl_exec($curl);
if ($data_temp != '{"ROWCOUNT":"0","DATA":[]}'){
$data_decode = json_decode($data_temp,true);//解碼json格式
$data_area[$i]['STATION'] = $data_decode['DATA'][0]['V01301'];
$data_area[$i]['TIME'] = $data_decode['DATA'][0]['DDATETIME'];
$data_area[$i]['V13023_24'] = $data_decode['DATA'][0]['V13023'];
……
}else{
$data_area[$i]['STATION'] = '';
$data_area[$i]['TIME'] ='';
$data_area[$i]['V13023_24'] = '';
……}
}
$data_encode_area = json_encode($data_area);//重新轉(zhuǎn)換成json數(shù)據(jù)
$myfile = fopen("D:/area.js" , "w") or die("Unable to open file!");//寫入文件
fwrite($myfile, $data_encode_area);
fclose($myfile);
推送功能使用FlashFXP軟件,通過設(shè)置計(jì)劃任務(wù)的方式,每5 min將生成的數(shù)據(jù)文件以FTP方式向外網(wǎng)服務(wù)器傳輸數(shù)據(jù)。
監(jiān)控模塊是整個服務(wù)的核心。部署于新浪云的監(jiān)控檢查程序每五分鐘讀取原始數(shù)據(jù)的狀態(tài),并分站號給予標(biāo)記。數(shù)據(jù)正常來報的站點(diǎn),標(biāo)記為0,并將標(biāo)記值存儲于新浪云KVDB存儲器中;未正常來報的站點(diǎn),標(biāo)記為1,標(biāo)記值將疊加到上述存儲器中。同時,檢查程序每5 min檢測各站點(diǎn)的標(biāo)記值,若有站點(diǎn)標(biāo)記值累計(jì)達(dá)到5,達(dá)到監(jiān)控閾值,觸發(fā)郵件發(fā)送模塊。另外,站點(diǎn)缺測標(biāo)記達(dá)6及以上,檢查程序?qū)⒆詣雨P(guān)閉該站點(diǎn)的郵件發(fā)送功能,避免重復(fù)提醒。站點(diǎn)數(shù)據(jù)恢復(fù)正常后,標(biāo)記值將清零,監(jiān)控服務(wù)進(jìn)入新一次循環(huán)。區(qū)域站通過通信網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸,容易發(fā)生間歇性短時次通訊信號丟失,從而導(dǎo)致該時次數(shù)據(jù)缺測。因此,為合理監(jiān)控和避免同一問題多次報警,設(shè)定監(jiān)控標(biāo)記參數(shù)設(shè)定為累計(jì)達(dá)到5后觸發(fā)郵件發(fā)送模塊。系統(tǒng)業(yè)務(wù)運(yùn)行時,可根據(jù)實(shí)際情況對缺測標(biāo)記參數(shù)進(jìn)行增減調(diào)整,以適應(yīng)實(shí)際監(jiān)控需求。
相關(guān)實(shí)現(xiàn)代碼如下:
$kv = new SaeKV();//初始化KVClient對象
$ret = $kv->init('KVDB存儲器編號');//加載KVDB存儲器
$infomation = $kv->get('infomation');
$url = "http://www.jmqx.gov.cn/xinhui/upload/area.js";//讀取數(shù)據(jù)文件
$curl =curl_init();
$data =curl_exec($curl);
curl_close($curl);
$data_decode = json_decode($data,true);
for($i=0;$i<=41;$i++){
$time[$i] = strtotime($data_decode[$i]['DDATETIME']);
if(empty($time[$i])){
$infomation[$i] = $infomation[$i] + 1; }//對每個站點(diǎn)數(shù)據(jù)到報情況進(jìn)行標(biāo)記
else{
$infomation[$i] = 0;}
//判斷每個站是否存在數(shù)據(jù),缺數(shù)據(jù)5次即發(fā)出提醒
if($infomation[$i] < 6 and $infomation[$i] > 4){
switch ($i){
case 0:
$station[$i] = "*****";
break;
……
case 41:
$station[$i] = "*****";
break;}
$maildata[$i] = $station[$i].'缺'.$infomation[$i].'次數(shù)據(jù)';}}
$ret = $kv->set('infomation',$infomation);//更新key-value
若區(qū)域站缺測標(biāo)為5時,觸發(fā)郵件提醒功能,系統(tǒng)將缺測站點(diǎn)告警信息發(fā)送至值班人員。通知消息告警功能使用新浪云平臺郵件服務(wù),服務(wù)基于SMTP郵件傳輸協(xié)議,對支持SMTP服務(wù)的郵箱進(jìn)行配置,并完成郵箱地址、用戶賬號及密碼等參數(shù)設(shè)置即可實(shí)現(xiàn)郵件消息發(fā)送。
郵件發(fā)送核心代碼如下:
$mail = newPHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 2;
$mail->Host = "smtp.126.com";
$mail->Port = "25";
$mail->SMTPAuth = true;
$mail->CharSet = "utf-8";
$mail->Username = "******@126.com";
$mail->Password = "******";
$mail->AddAddress("******@qq.com");//接收提醒信息的用戶郵箱,可添加多個
$mail->SetFrom("******@126.com", "新會區(qū)區(qū)域站監(jiān)控程序");//設(shè)置發(fā)送郵件的郵箱
$mail->IsHTML(false);
$mail->Subject = "區(qū)域站缺測提醒";//郵件主題
$mail->MsgHTML("郵件正文");//缺測信息正文
if(!$mail->Send()){
echo "發(fā)送失敗: " . $mail->ErrorInfo;//輸出錯誤信息}
else{
echo "發(fā)送成功";}
目前廣東省氣象局運(yùn)行的區(qū)域站監(jiān)控系統(tǒng),通過短信方式提醒縣級運(yùn)維人員設(shè)備運(yùn)行狀態(tài)。本文通過固定時段測試,對本系統(tǒng)以及省局監(jiān)控系統(tǒng)的縣級應(yīng)用層面(下簡稱“對比系統(tǒng)”)進(jìn)行對比檢驗(yàn)測試。
選取2018年9月16日強(qiáng)臺風(fēng)“山竹”影響期間為測試時間段,區(qū)域范圍選取廣東新會,合共42個區(qū)域自動站,匯總統(tǒng)計(jì)了本系統(tǒng)及對比系統(tǒng)的監(jiān)控表達(dá)能力,兩系統(tǒng)性能如圖3所示。
同時,為定量描述監(jiān)控系統(tǒng)對數(shù)據(jù)缺測的監(jiān)控能力,定義測試時段內(nèi)成功捕捉到的缺測站數(shù)占總?cè)睖y站數(shù)的百分比為監(jiān)控成功率。查驗(yàn)9月16日16時新會區(qū)域站數(shù)據(jù)來報情況,實(shí)際出現(xiàn)缺測的站數(shù)為12個。由圖2系統(tǒng)性能對比情況可見,本系統(tǒng)捕捉到11站的缺測狀態(tài),并發(fā)出提醒,監(jiān)控成功率達(dá)91%;而對比系統(tǒng)發(fā)送提醒8站,監(jiān)控成功率67%。可見該測試中,本系統(tǒng)監(jiān)控成功率優(yōu)于對比系統(tǒng)。分析具體站點(diǎn)表明,對比系統(tǒng)沒有發(fā)出監(jiān)控提醒的3個站點(diǎn),全部為近年新布設(shè)站點(diǎn)。由于本系統(tǒng)架構(gòu)輕量,易于維護(hù)和擴(kuò)展,因此站點(diǎn)的增減變化能夠迅速由臺站人員進(jìn)行修改,站點(diǎn)覆蓋率更高,從而使監(jiān)控成功率占優(yōu)。從平均反應(yīng)時間來看,本系統(tǒng)反應(yīng)時間為50 min,對比系統(tǒng)為26 min,對比系統(tǒng)反應(yīng)時間明顯短于本系統(tǒng)的反應(yīng)時間。分析造成該結(jié)果的原因,對比系統(tǒng)直接讀取站點(diǎn)的數(shù)據(jù)狀態(tài),根據(jù)數(shù)據(jù)狀態(tài)直接反饋缺測提醒,效率更高;本系統(tǒng)通過累積計(jì)算5個時次的數(shù)據(jù)缺測狀態(tài),同時經(jīng)過多流程的信息傳輸,數(shù)據(jù)信息由內(nèi)部網(wǎng)傳輸至互聯(lián)網(wǎng),因此響應(yīng)時間更長;如需縮短響應(yīng)時間,可通過調(diào)整本系統(tǒng)缺測標(biāo)記參數(shù),以及優(yōu)化數(shù)據(jù)流傳輸,以提高響應(yīng)速度。
圖2 雙軌運(yùn)行試驗(yàn)系統(tǒng)性能對比圖
(1)基于新浪云平臺搭建縣級氣象數(shù)據(jù)監(jiān)控服務(wù)可實(shí)現(xiàn)以下三大功能:氣象數(shù)據(jù)下載、監(jiān)控信息獲取和云存儲、主動提示告警服務(wù)。
(2)本系統(tǒng)架構(gòu)方案具有運(yùn)維成本低、可推廣性強(qiáng)、覆蓋站點(diǎn)范圍廣、新布設(shè)站點(diǎn)納入監(jiān)控速度快、監(jiān)控成功率高等優(yōu)點(diǎn);雙軌運(yùn)行試驗(yàn)顯示,本系統(tǒng)平均響應(yīng)時間為50 min,監(jiān)控成功率達(dá)91%。
(3)本系統(tǒng)存在一些不足,數(shù)據(jù)傳輸流程較復(fù)雜,平均反應(yīng)時間較長,與省級系統(tǒng)對比時效性較差,后續(xù)本系統(tǒng)的升級將重點(diǎn)整合和利用省級監(jiān)控資源,作為省級監(jiān)控的有效補(bǔ)充。同時將進(jìn)一步改進(jìn)傳輸流程,縮短耗時,提高監(jiān)控提醒的時效性。另外,在監(jiān)控各氣象要素基礎(chǔ)上,可進(jìn)一步開發(fā)判別災(zāi)害性天氣的監(jiān)控服務(wù),以拓展該服務(wù)的應(yīng)用功能。