胥志強(qiáng),何國平,唐 蜜,曾 元
(1.四川省雅安市氣象局,四川 雅安 625000;2.四川省攀枝花市氣象局,四川 攀枝花 617000)
隨著氣象業(yè)務(wù)現(xiàn)代化的發(fā)展,越來越多的氣象監(jiān)測設(shè)備和網(wǎng)絡(luò)設(shè)備需要進(jìn)行實時監(jiān)測運行狀態(tài)。僅雅安市氣象部門自動氣象站就多達(dá)200余個,MSTP專線28條,2018年還建成了多普勒天氣雷達(dá)1部,這些設(shè)備的數(shù)據(jù)傳輸情況和網(wǎng)絡(luò)設(shè)備運行情況都需要隨時監(jiān)視,發(fā)現(xiàn)故障要及時通知維護(hù)人員處理。目前監(jiān)控工作還存在一些不足之處:一是氣象設(shè)備、網(wǎng)絡(luò)故障需要人工來發(fā)現(xiàn),對監(jiān)測值班人員的依賴性較大;二是發(fā)現(xiàn)故障不及時,時效性低;三是發(fā)現(xiàn)故障后通知手段僅要靠值班人員打電話;四是故障登記靠人工。目前針對氣象行業(yè)設(shè)備狀態(tài)監(jiān)測報警軟件較少,尤其是隨著氣象觀測無人化、自動化的發(fā)展,對設(shè)備穩(wěn)定運行有了更高要求。因此亟需開發(fā)一個集故障監(jiān)測、報警、日志記錄于一體的自動化軟件,提升業(yè)務(wù)設(shè)備監(jiān)控報警能力。
釘釘監(jiān)測報警機(jī)器人主要由設(shè)備狀態(tài)收集、異常判斷、信息發(fā)送和日志記錄4部分組成(圖1)。整個系統(tǒng)流程為:軟件定時按照不同設(shè)備采用不同的方法來收集狀態(tài)信息,收集到各類設(shè)備狀態(tài)信息后進(jìn)行異常判斷,并生成報警信息,再用釘釘機(jī)器人將報警信息發(fā)送到相關(guān)的釘釘群提示維護(hù)人員,最后進(jìn)行日志記錄。軟件運行在氣象廣域網(wǎng)任意服務(wù)器,出現(xiàn)報警信息第一時間通過互聯(lián)網(wǎng)發(fā)送到維護(hù)人員電腦和手機(jī)釘釘客戶端。
圖1 監(jiān)測報警機(jī)器人邏輯關(guān)系圖
各類氣象設(shè)備和網(wǎng)絡(luò)運行狀態(tài)信息要根據(jù)設(shè)備類型進(jìn)行分類采集。例如多普勒天氣雷達(dá)的運行情況通過讀取最新生成的雷達(dá)基數(shù)據(jù)文件列表來反映,正常情況下雷達(dá)數(shù)據(jù)應(yīng)為每6 min生成一個新的基數(shù)據(jù)體掃文件,如果超過12 min未檢測到新的雷達(dá)基數(shù)據(jù)文件或雷達(dá)主機(jī)無法連接,則生成雷達(dá)異常報警信息。對于氣象站點的狀態(tài)則通過查詢各站點數(shù)據(jù)數(shù)據(jù)庫寫入狀態(tài)進(jìn)行判斷,若各站點當(dāng)前小時數(shù)據(jù)未及時入庫則生成站點未到報的信息。而網(wǎng)絡(luò)鏈路狀態(tài)則通過Telnet協(xié)議讀取核心路由器中省—市—縣各鏈路OSPF路由鄰居狀態(tài)來進(jìn)行判斷,當(dāng)出現(xiàn)網(wǎng)絡(luò)異?;蛑袛鄤t生成網(wǎng)絡(luò)告警信息。
在狀態(tài)采集和故障判斷中做到信息精確,如自動站數(shù)據(jù)異常精確到臺站,網(wǎng)絡(luò)告警信息精確到具體鏈路名稱。報警信息生成后,交給釘釘機(jī)器人報警模塊進(jìn)行處理。
目前阿里釘釘開放了機(jī)器人API接口,可以在釘釘群進(jìn)行消息發(fā)送。本軟件正是利用了釘釘?shù)拈_放接口將設(shè)備和網(wǎng)絡(luò)報警信息通過API接口進(jìn)行消息發(fā)送。
調(diào)用釘釘接口發(fā)送信息要遵循以下規(guī)則:采用HTTPS協(xié)議、發(fā)送內(nèi)容為JSON數(shù)據(jù)格式、采用UTF-8編碼,采用POST方式向接口提交請求,實現(xiàn)過程如下。
首先在要發(fā)送信息的釘釘群里創(chuàng)建自定義機(jī)器人,獲取唯一的Webhook地址,在釘釘API接口中加上Webhook地址,就可以在指定的群內(nèi)發(fā)送消息,為了保證消息的安全性,可以添加IP地址、關(guān)鍵字等進(jìn)行發(fā)送規(guī)則限制。機(jī)器人創(chuàng)建成功后可以使用Postman等工具進(jìn)行信息發(fā)送測試。
然后利用Visual studio或Python等開發(fā)環(huán)境編寫一個發(fā)送信息的類庫或動態(tài)鏈接庫(DLL)文件,用于報警信息的發(fā)送。其主要功能是實現(xiàn)報警信息按照釘釘API接口的規(guī)則提交POST請求,并將發(fā)送結(jié)果返回。向釘釘API接口提交的規(guī)則如下:一是請求方式為POST;二是請求地址為釘釘接口地址加上Webhook地址;三是請求包體包括發(fā)送內(nèi)容和提示人員列表。釘釘機(jī)器人支持發(fā)送的消息類型豐富,主要有文本消息(text)、鏈接(Link)和文檔快速排版(markdown)等6種類型的消息,本軟件主要發(fā)送的是文本消息,使用者還可以根據(jù)自己的需求選擇不同的消息類型。本軟件中釘釘發(fā)送消息使用了C#語言編寫了以下兩個方法來實現(xiàn):
一是向釘釘接口提交POST請求方法:public String Request(string url, string data, string reqtype)
第1個參數(shù)url為釘釘API接口地址,第2個data參數(shù)為json格式的報警內(nèi)容,第3個參數(shù)為請求方式參數(shù)(POST或GET)。
二是生成文本消息(text)報警的方法:public static string OapiRobotText(string content, List
第1個參數(shù)為報警內(nèi)容,第2個參數(shù)為提醒人員列表,第3個參數(shù)為是否提醒所有人,傳出參數(shù)為JSON格式的報警包體,該方法生成包體后調(diào)用Request方法提交請求,實現(xiàn)消息的發(fā)送。
將異常信息進(jìn)行報警后,要進(jìn)行日志記錄。通??梢圆捎脭?shù)據(jù)庫或文本文件進(jìn)行日志記錄。為了避免信息發(fā)送過于頻繁,每種報警信息可以根據(jù)業(yè)務(wù)具體要求或緊急程度設(shè)定不同頻度的檢測和報警。通過日志的記錄檢索可以避免信息的重復(fù)發(fā)送。本程序中因日志記錄數(shù)據(jù)量不大,采用按設(shè)備類別每天生成一個文本日志文件,方便管理者后期查詢。
目前該軟件在雅安市氣象部門投入業(yè)務(wù)運行(圖2),監(jiān)測了本部門自動氣象站、省市縣MSTP專線和多普勒天氣雷達(dá)等設(shè)備,這些設(shè)備的數(shù)據(jù)傳輸和網(wǎng)絡(luò)設(shè)備出現(xiàn)異常情況都通過釘釘客戶端進(jìn)行了及時報警,軟件還可根據(jù)業(yè)務(wù)規(guī)定的時效不同,設(shè)置監(jiān)測和發(fā)送信息的頻度,從應(yīng)用至今,發(fā)現(xiàn)雷達(dá)故障的時效從過去的平均2 h提升到現(xiàn)在的12 min,MSTP專線發(fā)現(xiàn)中斷從過去的平均6 h到現(xiàn)在的分鐘級,自動氣象站數(shù)量多則每天發(fā)送一次缺報信息,大大地縮短了處理故障的時間。
圖2 釘釘機(jī)器人監(jiān)測報警控制器程序界面
本文基于Visual studio平臺和釘釘機(jī)器人開放接口開發(fā)出的釘釘監(jiān)測報警機(jī)器人軟件,集設(shè)備狀態(tài)監(jiān)測、異常判斷、報警信息發(fā)送和日志記錄功能為一體,自動化程度高,極大的提高了維護(hù)人員發(fā)現(xiàn)問題的時效。隨著氣象業(yè)務(wù)的發(fā)展,氣象設(shè)備的穩(wěn)定運行越來越重要,監(jiān)測報警自動化是今后的發(fā)展方向,在設(shè)備和網(wǎng)絡(luò)監(jiān)測中還有可挖掘的空間,例如監(jiān)測到氣象站點的各要素、雷達(dá)產(chǎn)品可用性等。另外,釘釘機(jī)器人還可根據(jù)業(yè)務(wù)需求在氣象服務(wù)產(chǎn)品發(fā)布、災(zāi)害性天氣監(jiān)測、雨情報警、數(shù)據(jù)質(zhì)量控制等氣象業(yè)務(wù)中進(jìn)一步拓展,應(yīng)用范圍廣泛。