基于Zabbix的分布式数字化监控系统设计与实现

2018-06-29 09:07刘鹏宇陆丽丽孙玉强崔建伟
信息通信技术 2018年3期
关键词:触发器消息运维

于 滨 刘鹏宇 陆丽丽 孙玉强 崔建伟

中国联通济南软件研究院 济南 250100

背景

随着企业服务器和应用服务数量的不断增加,运营管理人员面对越来越多的应用,除了监控服务器自身节点是否正常运转外, 还需监控服务器上运行的Web、数据库、DNS等应用服务是否正常运行。传统运维方式中,运维人员疲于处理各种故障、效率低下,即使加班加点地调试、部署、维护,也经常因设备故障而导致业务中断,严重影响业务的正常运转;因此,部署一套高效可靠的监控系统,实时监控服务器与应用服务的运行状态,提供便捷、及时的通知机制让运维人员快速定位并解决故障尤为重要。

Zabbix作为一款企业级开源网络监控项目,提供分布式系统监控及网络监控功能,其高度集成的解决方案目前已广泛应用于各行各业[1]。Zabbix具有node和proxy两种分布式部署方式,能够监控几乎所有类型的设备,提供完善API接口,能够实现与其他运维管理系统的完美对接,其提供对外开放接口,支持自定义告警,方便及时有效地发布通知,这对于构建分布式监控系统具有重要作用[2]。基于Zabbix与Web应用和微信、APP等移动端应用结合,可以建设一套能够及时告警、快速定位、减轻运维人员繁重工作的监控系统。

1 系统整体架构

该系统由Zabbix与监控应用两部分组成。Zabbix完成对服务器和应用服务的监控,应用则对Zabbix所监控的项目进行展示和告警机制的处理。

Zabbix会定时获取服务器和应用服务的监控信息,并将数据存入数据库,此部分为应用端监控展示信息的数据来源。

Zabbix可通过配置触发器,在被监控的服务器和应用服务监控到达某个自定义阈值时触发触发器,执行相应动作。Zabbix提供了高扩展性的触发器及动作执行方式,便于进行自定义监控进而得到理想结果。Zabbix自身提供邮件通知告警方式,但由于邮件接收具有延时并容易被被通知人员忽略,因此该系统建立了微信和移动APP告警推送的机制,以保证运维人员可及时接受告警信息(如图1)。

图1 整体架构

1.1 Zabbix架构

Zabbix主要由Zabbix Server、Proxy、Agent、Web前端及Database等部分组成(如图2)。

图2 Zabbix架构图

Server为Zabbix核心组件,主要负责接收Agent发送的信息数据,管理系统配置信息和历史数据。Proxy为代理服务器,可视为Server的扩展部分,可代替Server收集监控设备上的数据并转发给Server,主要适用于分布式环境中[3]。Agent部署在被监控设备上,主要负责收集监控数据并发送至Server或Proxy。Web前端方便运维管理人员对Zabbix进行配置及查看监控设备的状态,通常与Server部署在同一台服务器中。Database负责存储收集的监控数据及Zabbix配置信息等。

1.2 Zabbix配置管理

Zabbix配置管理在Zabbix携带的web前端中进行,主要包括以下3个步骤。

步骤一:在需要监控的主机中,创建监控项Item,监控指定的数据。

步骤二:创建触发器Trigger,将创建好的监控项添加进触发器,并设置触发条件。

步骤三:创建动作Action,将触发器和用户关联起来,当触发器被触发时,执行相应动作(如图3)。

图3 Zabbix配置流程图

其中,主机即被监控的设备,监控项来源于被监控的主机,是监控数据收集的核心。触发器可以看作是一个控制中心,触发器会设定一个条件,当监控项中接收到的监控数据达到触发器设定的条件时,触发器便会执行相应的动作。本文设计的分布式数字化监控系统在触发器被触发后调用服务层接口,执行相应的消息处理流程,将处理后的消息推送至微信和移动APP中,及时通知相关人员,帮助其快速定位并解决问题。Zabbix作为分布式监控系统,其优势之一在于提供了自动发现功能,可自动发现并添加主机,这对于大规模的网络管理十分有效。同时Zabbix提供了模板功能,主要将一些共性的监控项如主机CPU、内存、磁盘等抽取出来,在添加监控项时只需添加模板即可将模板中的监控项全部纳入系统管理中,避免了重复性工作,提高工作效率。

2 基于Zabbix的分布式数字化监控系统应用

2.1 实时监控

报警信息推送的时效性将直接影响运维质量,实际工作中,运维人员无需时刻紧盯系统的运行情况,一切事件信息均通过微信、移动APP获取。Zabbix收集监控数据存储至数据库,该数据库作用于应用监控展示,通过对这些监控数据进行处理,可对监控信息进行个性化展示,满足企业的个性化需求。

Zabbix Server可通过Zabbix Agent、SNMP、ping、IPMI等方法对远程服务器及网络设备进行状态监控和数据采集。通过B/S模式在Web端进行系统配置和信息呈现。在Zabbix系统中将监控主机抽象为主机,系统采集服务器的信息抽象为监控项,通过设置触发器监测监控项的返回值,当满足触发条件便执行相应动作。Zabbix可设置的动作包括执行脚本程序、发送报警信息和执行命令,整个过程为毫秒级,能够很好地实现实时监控。

针对不同监控目标端又可分为对主机性能监控、对Web服务监控、对中间件监控等不同监控应用。

对主机性能监控:Zabbix Server有多种监控主机性能模板,用户可根据自身需要选择适当模板,对Cent OS系统性能监控,可包括磁盘、CPU、内存、流入流量、流出流量、丢包率等多项主机性能(如图4)。

图4 zabbix主机资源监控

对Web服务监控:采用net.tcp.listen[8080]监控服务器8080端口是否在监听状态,返回值为0表示8080端口没有处于监听状态,返回值为1表示8080端口处于监听状态;另外可通过net.tcp.port[IP,8080]检测是否对服务器8080端口进行TCP连接,通过该命令可验证服务器的连通性,返回值为0表示8080端口无法进行TCP连接,返回值为1表示8080端口可进行TCP连接(如图5)。

图5 WEB服务端口及进程监控

对中间件监控:随着分布式服务不断扩增,对中间件的监控刻不容缓。Zabbix自定义监控项便很好地满足个性化监控需求。通过对Zabbix Server配置文件UserParameter修改,以添加自定义监控项。如:UserParameter=cio.str[*],/opt/Zabbix/script/cipan_io.sh'$1';通过配置自定义监控项时将键值设置为cio.str[*],在监控项获取数据时,将执行其对应/opt/Zabbix/script/cipan_io.sh脚本,'$1'则为执行该脚本时传递的参数。

在zabbix基础监控的基础上建立的对应用中间件的监控效果如图6所示。

2.2 消息处理

图6 应用中间件监控信息

即使是再强大的监控系统,也不乏有误告发生。为降低Zabbix系统压力,Zabbix系统配置自定义监控项均采用异步处理方式,即agent每分钟获取一次自定义监控项的结果并存放于日志文件中,而Zabbix仅需定时获取日志即可,无需进行复杂的逻辑处理,大大提高了Zabbix系统性能,但其缺点为,异步数据处理容易导致数据延时。因此,对Zabbix的告警消息进行二次处理是十分必要的,能够极大地降低误告频率。

另外Zabbix告警内容存在局限性,例如某个分布式服务中某节点挂掉,无法获取具体节点;某台机器CPU负载过高,无法获取该机器部署了哪些应用;消息队列中消息积压超过阈值,却无法获取具体哪个Topic积压数量过多;消息队列中出现离线消费者,却无法获知该离线消费者所对应的Topic等;因此需要对告警消息进行二次处理。

当监控项监控数据达到阈值同时触发触发器发起动作时,告警消息将发送至消息处理接口,将告警消息进行过滤、加工、处理为更加准确易读的消息,便于运维人员更快定位问题(如图7)。

图7 zabbix触发动作执行脚本

触发动作采用脚本形式,通过调用zabbix-server机器中的shell脚本,调用消息处理的JAVA程序,对消息进行过滤处理。下面将要介绍的告警模块,告警内容均是经过处理的,获取主机部署的应用,虚拟机的宿主机等信息均是通过消息处理过程获取。

2.3 告警

监控消息处理后,垃圾消息已经被过滤,一些可读性不高的消息在被处理之后获得良好的可读性,因此需要一个良好的通知机制将这些消息推送给相关人员。Zabbix默认支持邮件告警功能,但邮件接收不及时甚至容易被忽视[4]。手机作为人们日常生活中必不可少的工具,适合作为告警消息的接收端,便于运维人员及时收到告警消息,快速定位故障处理问题。在大规模告警消息产生时,通过调用短信网关实现短信告警方式,对于消息接收者来说是一个很不友好的体验,同时会带来相应的费用,经过多方面考虑,最终我们选择使用微信和移动APP来作为告警消息的接收端。

微信在注册后通过配置相应参数搭建服务,可为企业不同项目创建不同应用,每一应用对应唯一标识agentId,在调用微信消息推送接口时,只需在参数中添加相应agentId,便可将告警消息推送至相应项目中,该项目负责人员便会即时接收到告警消息(如图8)。

图8 微信推送流程图

移动APP的消息推送机制通过IOS和Android各自推送服务器实现,用户在安装APP后,APP会向各自推送服务器注册相应的设备信息,当消息经过处理流程到达APP推送部分时,这些处理后的消息会被推送至IOS和Android推送服务器上,推送服务器会查看当前服务器注册的设备信息,并将该消息发送至相应设备(如图9)。

图9 APP推送流程图

因服务器负载过高推送的经过消息处理后的APP和微信告警如图10所示。

图10 经过消息处理后APP和微信推送的告警信息

2.4 信息统计

预测分析是一种统计或数据挖掘解决方案,通过对历史数据进行计算,以确定未来结果的算法和技术[5]。该方法可用于预测、优化、预报、模拟等。在本文的监控系统中,基于历史数据进行预测分析,可判断何时会发生系统故障,例如基于1小时历史数据,分析未来3小时系统状态。

Zabbix的监控告警,仅能在出现问题后通知运行维护人员,虽然Zabbix3.0已支持预警功能,但仍存在有局限性,无法较好地满足当前个性化的需求,因此本监控系统中对Zabbix监控的历史数据进行统计分析,以提前预知问题[6]。

通常在监控系统中有两个主要关注点,一是历史数据的存储与展示,二是定义报警策略并及时发现问题。为能更加细致、精确地分析数据,在监控系统中,将监控数据采集进行细粒度存储[7]。

Zabbix系统每分钟获取一次监控数据,若系统监控大批量主机,这些机器的监控数据存储代价和查询绘图代价较高。因此,本监控系统中,每日凌晨1点,定时获取Zabbix前一天的监控历史数据,每台机器获取Top5并取平均值,本监控系统Web界面展示Zabbix报表,直观地展示某台机器某段时间CPU、内存、磁盘、流入流量、流出流量等基本性能。可根据所绘趋势图预测机器未来一段时间的性能及资源使用情况。

随着分布式系统的广泛应用,使用的机器越来越多,如何对这些机器进行合理的资源分配也是当前运维人员需要考虑的问题[8]。通过对Zabbix监控数据存储,将数据进行筛选、处理、聚合后,展示每一台机器的CPU、内存、磁盘等使用情况,可直观展现每台机器的资源使用情况,以便采取相应措施,提高资源利用率。

对主机资源信息监控如图11所示。告警信息统计结果如图12所示。

2.5 权限管理

通过增加权限的管理,系统可以有效地控制不同人员查看不同项目的监控和告警内容,保证了数据的安全性。

图11 主机资源监控信息统计

图12 告警信息统计分析结果

Web和APP使用服务端的权限管理模块,该模块下,不同角色对应不同权限,在Web应用下,通过对不同用户账号配置不同角色,赋予这些用户不同权限。用户在登陆Web后,只能查看其权限范围内的监控信息,权限范围外的信息对该用户屏蔽。APP与Web相同,对于监控信息只有权限范围内的信息才可以查看,同时APP上推送的告警消息,用户也只能接收到其权限范围内项目的告警消息。

微信提供了一种权限管理方式,在微信中为不同项目创建不同应用,可在不同应用中添加不同人员,只有用户是该应用下的成员时,才能接收到相应的推送消息。

3 总结

通过Zabbix优秀的监控能力,与自建应用系统相结合,开发出一套满足企业个性化需求的分布式数字化监控系统。通过其内置的模板功能,可对服务器主机的CPU、内存等共性指标快速监控,大大提高配置效率,另外通过自定义监控项的配置,极大满足了企业的个性化需求,保证监控内容的全方位覆盖,通过Zabbix对不同监控项配置不同触发策略,并结合移动端应用的搭建,使运维人员可以实时获取监控消息和经过过滤、分类并结构化处理后的告警信息,帮助运维人员快速定位故障,解决问题,提高工作效率,保证企业应用的稳定性。

[1] 毛承国,张卫华,张进铎,等.大规模集群运维自动化的探索与实践[J].信息安全与技术,2014,5(2): 60-63

[2] 钟志勇.微信公众平台应用开发实战[M].北京:机械工业出版社,2013

[3] 郭晓慧,李润知,张茜,等.基于Zabbix的分布式服务器监控应用研究[J].通信学报,2013,34(Z2):94-98

[4] 刘远超,李树彬.基于Zabbix和微信企业号实现网络监控的研究[J],山东科学,2017,30(4):124-130

[5] 车路,张焕远,夏亚东.基于开源软件的云监控平台设计与实现[J].计算机技术与自动化,2015,34(1):136-140

[6] 龙炜.自动化运维工具在企业信息系统管理中的应用[J].微型机与应用,2017,36(5):102-104

[7] 肖海琴.Zabbix性能监控软件在高性能集群上的应用[J].中国管理信息化,2017,20(3):139

[8] 李磊.IT自动化运维平台建设和应用[J].信息技术与标准化,2016,1(10):59-61

猜你喜欢
触发器消息运维
浅谈时序逻辑电路的成长记忆
一张图看5G消息
运维技术研发决策中ITSS运维成熟度模型应用初探
触发器在酒店管理系统中的应用
风电运维困局
杂乱无章的光伏运维 百亿市场如何成长
配电线路的运维管理探讨
消息
消息
消息