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