运维保障系统需要满足跨平台、分布式部署的需求,因此采用B/S和C/S混合开发模式,后端使用 Java 语言开发,前端使用 Jsp&Servlet 及Echarts、Html5等,使用MySQL数据库进行日志等的持久化存储,利用Eclipse/IDEA作为IDE开发工具,使用subversion进行版本控制[2-4]。系统技术方案如图1所示,设计思路如下:
(1)系统运维需要具备值排班、日志登记、结果分析比较、经验分享等功能,针对地震预警的运维保障系统的数据库共设计16张表,包括:值班人员信息表,值班人员角色表,值班表,业务系统编码表,监控系统连接信息表,监控系统日志路径配置表,系统监控日志登记表,值班日志登记表,值班文档表,波形延迟表,值班报告信息表,预警系统处理登记表,预警发布信息表,地震预警定位表,地震三要素表和用户名密码找回表。
(2)考虑到地震预警等业务系统一般运行在内网环境,而告警信息的展示和推送等又需要外网支持,因此为保障数据安全和方便运维人员管理,将运维保障系统分为数据采集(Agent)和数据应用(Server)两个部分,两者之间通过消息中间件进行通信。下面分别就这两部分进行介绍。
数据采集(Agent)部分主要负责信息采集和处理,一般部署在地震预警服务器上。客户端根据其IP地址从数据库获取该IP下需要监控的业务系统的配置参数,如连接预警系统JVM的JMX参数、预警系统运行日志路径等;客户端采集到的信息使用MQTT协议或JMS等发送到消息中间件指定主题;客户端采用模块化设计,各模块可独立运行,通过配置文件或网页可以实现功能的动态开启和关闭而不用更改代码。其核心功能包括:
(1)监控地震预警系统Java虚拟机(JVM)的CPU使用率、堆内存占用情况、预警系统数据接收线程和处理主线程等重要线程有无丢失、监控其运行状态;
(2)根据一定规则提取地震预警系统运行日志中不同等级(DEBUG, INFO, WARN, ERROR, FATAL等)的日志信息,重点关注ERROR及以上级别的日志信息,并对外告警。
(3)以某个NTP授时服务为基准,比如中国科学院国家授时中心(NTSC)提供的NTP授时服务(ntp.ntsc.ac.cn),监控台站数据断记/延迟情况,还可以对预警系统所在服务器的NTP授时进行监控,保证地震预警系统授时准确;
(4)利用台站噪声功率谱等方法监控台站数据质量;
(5)监控预警服务器的CPU、内存、硬盘、网卡等使用情况。
数据应用(server)部分主要负责订阅消息中间件对应主题,然后接收Agent采集到运行状态信息和告警信息等并进行推送和可视化展示;服务端同样采用模块化设计,可根据需要进行功能配置部署在不同的机器上,这样的设计一方面可以减轻单一服务端的节点压力,起到负载均衡功能;另一方面可以做到内外网分离,比如打印、FTP上传日志和数据入库等可在内网进行,而邮件告警或企业微信推送可在外网处理。服务端的核心功能包括:
(1)设定异常等级划分和告警规则,按照不同等级和规则向对应的人员发送信息;
(2)通过企业微信或邮件等推送监控告警信息或人员值班提醒信息等;
(3)运维报告自动打印、自动以FTP等方式对信息进行归档;
(4)Web界面进行排班、统计分析、监控系统参数配置等;
(5)Web界面实时推送和可视化显示台站数据断记/延时,台站数据质量、服务器的信息等。