APP下载

Webhook技术在气象资料业务监控中的运用

2019-10-21施佳驰刘丹枫

大众科学·上旬 2019年9期

施佳驰 刘丹枫

摘 要:为保证各类气象资料传输时效,湖南省级气象业务系统须保持不间断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技术开发气象资料业务监控系统,在现有监控系统的基础上,通过企业微信群机器人消息推送功能及时通知运维值班人员,是对气象信息业务告警技术的积极探索。