贵州省气象信息中心 金石声 白铁男 谭海波 唐维尧
本文基于开源架构的Zabbix 监控系统,对省级气象数据收发系统CTS(Collection and Transfer System)集群的管理软件VCS(Veritas Cluster Server)所承载的各项业务进行精细化监控。系统从资源组层面实现了对CTS 集群业务运行状态的集约化监控,并以拓扑图的方式展示了各资源组的运行状态,通过动态图标之间的连线直观地了解资源组之间的业务依赖关系,在实际工作中精准的定位故障,极大地提高了核心业务系统的运行维护效率,符合气象信息化和现代化的基本要求。
省级气象数据收发系统CTS(Collection and Transfer System)。作为气象资料交互的核心业务系统,承担着气象资料的收集、处理、分发等业务。为了保证系统的高可用性,采用了VCS(Veritas Cluster Server)集群管理软件对CTS 集群的应用进行管理[1]。VCS 集群管理软件虽然提供了管理界面,但是界面过于简单,只适用于对应用进行管理,不具有基本的告警展示、推送功能,无法满足集约化监控的要求[2]。为解决上述问题,基于开源架构的Zabbix 监控平台自由度高、拓展性强的优势,通过梳理VCS 集群管理软件上的资源组情况,设计并开发了专门针对CTS 的监控系统。
如图1 所示,CTS 系统集群由8 台服务器组成,通过VCS 集群管理软件对服务器和分布在服务器上的资源组进行管理,资源组即相同类型应用的集合。采用VCS提供的Hastatus 命令编写Shell 脚本,定时对各资源组的运行状态进行采集并写入日志文件。Zabbix 通过SSH方式登录指定服务器对运行日志进行采集和处理,再通过触发器组件(Triger)和拓扑图组件(Map)对日志内容进行告警和图形化展示。各个业务运行状态在CTS 系统生成,Zabbix 对业务运行状态进行采集、过滤、展示。资源组分布情况及负载类型如表1 所示。
表1 CTS 资源组进程分布情况表(“parallel”代表并行,“failover”代表主备)Tab.1 Process distribution of the CTS resource group("parallel" represents parallel and "failover" represents active and standby)
图1 系统架构设计图Fig.1 System architecture design diagram
为实现其主要功能,系统包括信息采集模块、告警模块和监控展示模块[3,4]三个功能模块,数据库依托Zabbix 监控系统的MySQL 数据库。
脚本部分基于Linux 环境下的Shell 语言编写,主要功能是通过VCS 集群管理提供的状态采集命令Hastatus,将CTS 集群的运行状态打印并保存到指定的日志文件;监控项部分基于Zabbix 系统采取SSH 远程协议类型实现,主要功能是在服务器上获取日志文件信息,采集脚本如下:
source /root/.bash_profile
file_dir="/root/hastatus/hastatus.log"
if [ -f "$file_dir" ]; then
rm $file_dir
fi
sleep 1
hastatus -sum >$file_dir
监控项部分分为父监控项和子监控项,为了减少对CTS 的访问,采用父监控项采集日志文件内的全部信息,采用子监控项在父监控项的基础上通过正则表达式对信息进行过滤[5],从而获取具体每个资源组的运行状态信息。例如,对于AWS-PQC-grp 这个应用的运行状态采集结果如下:
B AWS-PQC-grp begy-cts01 Y N OFFLINE
B AWS-PQC-grp begy-cts02 Y N ONLINE
则对应的两个子监控项的正则表达式分别为:B.*(AWS-PQC-grp).*(begy-cts01).*([A-Z]+).*([A-Z]+).*([A-Z]+)和,B.*(AWS-PQCgrp).*(begy-cts02).*([A-Z]+).*([A-Z]+).*([A-Z]+),然后分别取出第5 个字段即表示该应用在两个节点上是否在线。
告警模块的功能是通过Zabbix 系统触发器组件实现。触发器内嵌有很多函数,本系统使用str()函数来判断监控项采集的信息中是否包含有OFFLINE 的字符串[6],1 表示信息中能找到,0 表示信息中心未找到。对于并行应用(parallel),每个应用的状态均是ONLINE 状态则表示资源组运行正常;对于主备应用(failover),一个应用ONLINE 状态则表示对应的资源组运行正常。对于这两种情况对应触发器里可以包含多个条件,根据资源组在服务器之间的负载类型,触发器的条件由and 或者or 连接,当负载类型是并行模式(parallel)时条件由and 连接;当负载类型是主备模式(failover)时条件由or 连接,触发器样例如下:
parrallel 类负载触发器
{xxzx_yxjkk_CTS05:begy-cts01-Scheduler-grp.str(ONLINE)}=0 and {xxzx_yxjkk_CTS05:begycts02-Scheduler-grp.str(ONLINE)}=0
failover 类负载触发器
{xxzx_yxjkk_CTS05:begy-cts07-bstd-grp.str(ONLINE)}=0 or {xxzx_yxjkk_CTS05:begy-cts08-bstd-grp.str(ONLINE)}=0
监控展示模块功能通过Zabbix 系统拓扑图组件实现,通过在拓扑图画布上添加“元素”,将CTS2 各资源组状态以图形的方式进行直观的展示,在资源组状态异常时,触发器就会根据负载类型来判断是否告警,“元素”图标也会根据触发器的状态而发生变化[7]。通过“元素”之间添加连线可以清楚展示各资源组之间的依赖关系,在发生故障时根据发生异常的“元素”和“连线”可以快速、准确地定位故障发生的资源组及依赖的资源组,提升了运维效率,从而保障了数据服务能力[3],资源组依赖情况如图2 所示。
图2 资源组依赖图Fig.2 Resource group dependency diagram
本文依托开源架构的监控系统Zabbix[8],针对集群的管理软件VCS 不能提供告警的业务难点展开研究,通过梳理VCS 集群管理软件上的资源组情况,将资源组之间的依赖关系以及资源组在服务器之间的负载类型考虑进来,实现了CTS 资源组状态层面的集约化监控,提升了监控的精细性和准确性,提高了核心业务系统CTS 的运维能力,符合气象信息化发展的需求。