基于Zabbix和Jenkins的运维可视化自动故障处理方式研究与设计
扫描二维码
随时随地手机看文章
引言
随着分布式系统以及x86服务器的大规模运营,系统所涉及的主机越来越多,应用的服务器类型也越来越多,使得业务复杂度逐步提升,运维人员的工作强度和压力也越来越大。为解决这一问题,提升维护工作的自动化水平势在必行。在系统日常维护工作中,故障处理是最常见的问题,对常见故障进行自动化处理,能够在极大程度上减轻维护人员的压力。本文将基于Zabbix和Jenkins,研究并设计一个自动化故障处理方案。
1Zabbix和Jenkins简介
Zabbix是开源分布式监控方案之一,具有良好的可用性和可靠性,能够对系统中的机器磁盘、CpU、内存以及网络状况进行实时监控并进行可视化呈现。相对于其他的开源监控软件,如Nagios、Cacti等,Zabbix具有更好的中文兼容性以及更好的文档支持。
Jenkins是一个开源软件,其主要目的是为了对于持续的重复性工作进行可视化展现,旨在提供一个开放易用的软件平台。Jenkins具有丰富的插件,包括ssH、0rac1e、HTTpp0sT等,提供了易于扩展的能力,为配置化操作提供了便利。
2系统设计总体介绍
系统总体设计流程如图1所示。
故障自动化处理是通过使用Zabbix对主机进行监控,配合Zabbix配置的触发器进行动作触发、告警,并通过调用在Jenkins配置的任务而实现的,并且可以运用短信进行可视化追踪呈现。整体设计包括4个模块:服务器监控模块、告警触发模块、预案调用模块、可视化配置操作模块。
2.1服务器监控模块
服务器监控模块主要用来采集每台生产机器的信息,是整个监控系统的核心。利用部署在每台生产机器上的ZabbixC1ient客户端对主机的信息进行采集,信息包括内存、CpU、磁盘、网络状况以及服务运行情况等。
监控平台通过服务器主机1p或者主机名对于不同的主机进行区分,实时对系统上报的信息进行处理,同时进行数据存储和展示。
2.2告警触发模块
告警触发模块是通过配置在Zabbix主机中的触发器和阀值来实现的,例如,当CpU可利用率高于阀值时就会进行告警:内存剩余可利用率低于阀值触发告警。对于一个具有较小容量的磁盘来说,80%的磁盘利用率已经具有很高的风险性了,而对于一个较大空间的磁盘而言,10%的磁盘剩余足够安全运行很长时间。因此,对于不同的指标、不同的业务场景,需要配置不同的触发器以及阀值。服务器监控模块中的数据一旦满足触发器条件,触发器即会工作,触发相应的动作,Zabbix提供了多种操作方式,如Cur1调用、ssH命令执行以及短信邮件等操作。
2.3预案调用模块
相对于Zabbix提供的操作方式,Jenkins的扩展性更为优秀,提供更多插件,Jenkins提供了极具扩展性的使用方式,无需进行代码编写,即可实现数据库s0L执行、she11脚本执行、HTTp请求执行等功能,具有优秀的可视化能力。本文采用ssH方法对远程主机的服务进行重启,磁盘空间清理、对数据库长会话进行监控处理、对锁表进行杀锁操作等,均可以通过Jenkins的配置操作方法实现。
2.4可视化配置模块
在Zabbix以及Jenkins中通过配置化的操作告警以及触发器和预案处理方式进行配置,避免了传统告警触发机制的黑盒化、脚本化。将故障和数据清晰展示在维护人员面前,进一步提高了运维水平,并降低了人员要求。
3系统配置实现方法
3.l系统短信发送
Zabbix的短信发送预置方式为调用串口进行短信发送,直接调用即可发送到设备。在目前的系统建设中,较少采用这种方式,而是采用PosT请求或者数据库插表的方式实现。短信内容在数据库插入表之后,后台发送进行扫描,这种处理方式具有较好的抗挤压性,可以提供较好的缓冲能力。本文通过编写脚本,将告警短信的接收者和接受短信设置为参数,传入后台sqlplus脚本中进行数据插入,Zabbix的短信模板如下:
Problemstartedat(EVENT.TIME}on(EVENT.DATE}Problemname:EVENT.NAME}:(ITEM.VALUE}Host:(HosT.NAME}
severity:(EVENT.sEVERITY}
originalproblemID:(EVENT.ID}(TRIGGER.URL}
对于sqlPlus脚本而言,不同参数的传递是根据空格区分的,需要对后续参数进行合并,sqlplus脚本中第一个参数为接收者号码,而第二、第三以及第N个参数均为告警内容,在shell中使用msg='echos(@:2}'进行合并,将msg向后传输即可,最终生成接收者号码和短信内容的脚本进行传送。
3.2动作调用
触发器被触发后,调用短信模块将告警信息发送给接收者,同时利用Curl工具调用Jenkins中已经配置好的预案。
Jenkins出于安全的考虑,在远程调用过程中,需要通过验证用户密码和token来进行安全认证。为此,建议设置独立的用户进行远程调用。远程调用的格式是由用户名、key、JoB对应的URL以及token共同构成。例如:http://triggerurl:d2一4f3347d982c一ca12一cc69323190a3@IP:Port/0enkins/0ob/dblogspartitiondrop/buildjtoken=tokenName。
其中,key的查看需要在Jenkins设置中通过查看用户APIToken实现,且每次查看后都会发生变更。token保护是针对任务而单独设置,不同的任务可以具有不同的token,是通过在Jenkins任务中"触发远程构建(例如,使用脚本)"来设定的。
3.3Jenkins预案配置
系统触发告警后,如果立即触发故障处理,有可能在测试中造成系统不可用,因此,在预案被调用后,故障处理的最合适时间应该是等待N分钟后,并能够提供可取消的方案,从而避免被认为是误操作。在本文设计的方案中,调用预案后,通过Jenkins发送触发短信。系统提供URL可以实时取消,如果无人取消或者操作,系统将继续下一步,等待任务,并在完成后进行结果告知。
触发短信的模板是通过Jenkins预置参数来构建的,Jenkins的常用预置参数如表1所示:
利用这些内置参数,可以构建短信模板:如"xxxx告警触发任务:s(JoBNAME}?s(BUILDURL},让系统等待5min后自动处理,可通过点击URL查看或取消",系统等待功能可通过sleep命令实现,最终配置如图2所示。
完成后可以进一步在Jenkins中添加其他故障处理配置,如重启服务、清理磁盘文件、调用数据库脚本等,从而实现系统故障的自动化处理。
3.4Zabbix动作配置
Zabbix采集到的数据经过触发器后,需要调用Jenkins中的任务进行处理,在Zabbix中进行动作添加即可实现。在Zabbix的动作操作中选择Zabbix服务器执行命令,脚本如下:
curl-,PosThttp://triggerurl:d2一4f3347d902c一ca12一cc69323190a3@IP:Port/0enkins/0ob/dblogspartitiondrop/buildjtoken=tokenName,即可调用相关配置预案从而进行相关处理。
4方案实现效果
在Zabbix收集到的数据经过服务器处理后,如果达到了触发器条件,则会首先发送告警短信给运维人员,然后调用Jenkins中的预置任务进行处理。Jenkins再次发送确认短信,如果无人操作,则继续工作,完成任务并发送结束告知短信。系统设计的最终效果如图3所示。
图3系统设计的最终效果
5结语
随着分布式系统的广泛应用,可视化维护以及自动化运维已经成为当前研究的热点话题,相对于传统的监控告警、人工上线等处理方式,本文设计的基于Zabbix和Jenkins的自动化故障处理方案具有可视化、可追踪的特点,一方面实现了对系统健康度的监控,另一方面能够对于常见故障进行实时自动处理,具有一定的实用价值和先进性,并进一步提高了运维质量,有效缓解了运维人员的工作压力。