施佳馳 劉丹楓

摘 要:為保證各類氣象資料傳輸時效,湖南省級氣象業務系統須保持不間斷24 小時運行。當出現嚴重系統故障時,極大影響氣象資料傳輸的完整性與及時性。針對省級業務系統中存在的實際問題,采用Webhook技術開發氣象資料業務監控系統,通過企業微信群機器人消息推送功能及時通知運維值班人員,使其能在最短的時間內獲取未正常上傳氣象資料的臺站號及聯系方式,從而提高氣象資料傳輸及時率。
關鍵詞:Webhook,企業微信,資料監控。
1? 關鍵技術介紹
1.1? Webhooks技術介紹
Webhooks是一個api概念,是微服務api的使用范式之一,也被成為反向api,即:前端不主動發送請求,完全由后端推送。簡單來說,WebHook就是一個接收HTTP POST(或GET,PUT,DELETE)的URL。一個實現了WebHook的API提供商就是在當事件發生的時候會向這個配置好的URL發送一條信息。與請求-響應式不同,使用WebHooks,可以實時接受到變化。對于第三方平臺驗權、登陸等 沒有前端界面做中轉的場景,或者強安全要求的場景等,適合用 Webhooks 做數據主動推送。Webhooks 是一種新的前后端交互方式。如果客戶端要長期監聽某個任務的狀態,按照正常的api調用的方式去做,那么必須不停得輪訓服務器來獲取當前狀態;使用webhook則無需輪訓,通過API 可以確定是否發生了更改,如果更改了只需要等待服務器推送信息過來,然后客戶端更新就可以。
1.2? 企業微信介紹
即時通訊(Instant Messaging)是目前Internet上最為流行的通訊方式,各種各樣的即時通訊軟件如雨后春筍般,不斷涌現,服務提供商也提供了越來越豐富的通訊服務功能。通信技術的蓬勃發展,層出不窮的即時通訊軟件,也為氣象資料業務監控帶來了更多的可能。
微信是騰訊公司于2011年推出的一個為智能終端提供即時通訊服務的免費應用程序。微信支持跨通信運營商、跨操作系統平臺通過網絡快速發送免費語音短信、視頻、圖片和文字。
企業微信,是騰訊微信團隊為企業打造的高效辦公平臺。企業微信在發布2.8.7版本上線了“群機器人”功能:支持在內部群聊中添加“群機器人”,通過配置可以讓機器人自動推送消息。管理員可以根據業務需求創建不同功能的“群機器人”,包括監控告警、數據推送、自動回復等。同時,企業微信管理員可以查看和停用當前企業成員創建機器人,并管理成員創建機器人權限。本文使用企業微信群機器人進行消息推送。
2? Webhook技術在氣象資料業務監控中的運用
2.1? 通過SSH方式監控氣象資料
paramiko是Python的一個庫,實現了SSHv2協議。安裝paramiko庫以后,可以在Python程序中直接使用SSH協議對遠程服務器進行執行操作。paramiko有兩個核心組件,一個是SSHClient,另一個是SFTPClient。SSHClient的作用如同Linux里的SSH命令,可以對SSH會話進行封裝,該類封裝了傳輸(Transport)、通道(Channel),用于執行遠程命令。SFTPClient的作用如同Linux里的sftp命令,可以對SFTP客戶端進行封裝,用于對遠程文件進行操作,例如對文件進行上傳、下載、修改權限等的操作。
各個縣級氣象臺站正常上傳的氣象資料保存在省級Cimiss的/becs/workdir/coll/archive/的目錄下,本文編寫一個python腳本創建一個Threading進程,定時使用paramiko模塊通過ssh的方式訪問氣象資料保存目錄以獲取一個資料到達列表,使用正則表達式去除冗余信息獲得各個資料的上傳的臺站號,與正常上傳情況下的臺站號做數據匹配從而獲得未正常上傳的臺站號,實現對氣象資料的初步監控。
2.2? 創建企業微信群機器人,使用Webhook技術發送消息
使用企業微信群機器人進行消息推送,首先獲取自定義機器人Webhook,在機器人管理頁面選擇添加機器人,輸入機器人名字并選擇要發送消息的群。創建成功后,即可獲得這個機器人對應的Webhook地址。獲取到Webhook地址后,構造post請求的data向這個Webhook發起HTTP、POST請求,即可實現給該群組發送消息。群機器人支持的消息類型及數據格式有:文本類型、markdown類型、圖片類型、圖文類型。群機器人消息發送頻率有頻率限制,即每個機器人發送的消息不能超過20條/分鐘。使用Webhook技術可將未正常上傳的臺站號以及臺站電話等相關信息發送消息至企業微信的相關群組。企業微信機器人消息推送成功如圖1所示。
2.3? 使用pymysql將發送結果存入MySQL數據庫
pymysql是在 Python3中用于連接 MySQL 服務器的一個純Python庫,Python2中是使用mysqldb。在python終端執行命令:pip3 install pymysql,即可實現對pymysql庫的安裝。
再使用Webhook技術將消息發送至企業微信的相關群組后,會返回一個狀態信息提示消息是否已經發送成功。使用pymysql模塊將發送狀態等信息存入MySQL數據庫,存入的信息有:消息發送時間、未正常上傳的臺站號、臺站所屬地市、臺站電話等。后期可通過查詢數據庫獲悉程序運行情況及未正常上傳的臺站等的數據信息。
3? 小結
本文基于Python語言,采用Webhook技術開發氣象資料業務監控系統,在現有監控系統的基礎上,通過企業微信群機器人消息推送功能及時通知運維值班人員,是對氣象信息業務告警技術的積極探索。