基于Zabbix的应用监控系统

2018-09-20 10:47李晓晖
价值工程 2018年28期

李晓晖

摘要:随着信息时代持续发展,面对复杂的业务和多样化的需求,IT应用迅速扩展,运行环境也发展为分布式服务器,用户对系统稳定性提出了越来越高的要求。针对这种情况,如何有效地监控分布在不同服务器的应用运行状态,在出现故障时及时发现,是大多数企业必须解决的问题。文章设计了基于Zabbix的应用监控系统,能够对复杂部署的IT应用进行监控,并具备普适性,可广泛推广应用。

Abstract: With the developing of Information Age,facing the increasing complicated work and diverse needs,the application of IT has expanded rapidly,the running environment has developed to distributed servers,and the user's equirements for the stability of IT applications are higher. In this situation,how to effectively monitor the running status of applications distributed on different servers and find out the cause when exceptions occur,it is an issue most companies need to solve urgently. A system for monitoring the applications based on Zabbix is developed,which can effectively monitor the complicated IT applications. It has good adaptability,and can be widely applied.

關键词:应用监控;Zabbix;IT应用程序

Key words: application monitoring;Zabbix;IT applications

中图分类号:TP391 文献标识码:A 文章编号:1006-4311(2018)28-0252-03

0 引言

随着信息技术的迅猛发展,要处理的信息量及应用的复杂度也在不断增大、增强。越来越多的互联网企业采用分布式服务器架构,不同的服务器提供不同服务,或者多台服务器进行负载均衡,以提高系统的运行速度,为用户提供更好的体验[1-2]。但随着硬件及应用数量的大幅增加,部分服务器或应用发生故障的可能性也随之升高,在系统发生故障时,人工定位发生故障的机器是不大现实的[3]。设计一个可靠灵活的应用监控系统是十分必要的,在故障发生时能主动准确定位故障节点,相关信息能及时、准确通知系统管理员。通过技术手段代替人工来进一步落实信息运维模式的标准化、规范化和自动化要求是实现精细化运维工作问题解决思路的重要基础[4]。

商用的系统监控类软件价格较高且不够灵活,开源软件则具有良好的社区支持和氛围且插件较多,可扩展性好的特点。Zabbix是一种高度集成的开源分布式网络监控解决方案[5],是企业常用的开源监控软件之一,有特别良好的开发文档及中文支持,因此本监控系统是基于Zabbix的基础上进行设计,使用Zabbix进行基本的软硬件参数监控,通过独立模块开发来完善本应用监控系统的功能。

1 系统功能分析

1.1 服务器监控

服务器监控主要是针对服务器CPU、内存、磁盘等硬件参数以及软件参数的监控,是针对IT应用的基础运行环境的监控,用于IT应用在运行过程中外部环境的实时监控,及时发现非IT应用本身问题导致的故障。

1.2 IT应用监控处理

IT应用监控主要是针对IT应用服务自身的监控,包括应用服务当前运行状态,应用服务日志输出有无异常,应用中是否存在需要优化的内容等,在发现异常之后能够自动进行部分简单的修复工作,如对异常挂起的应用进行尝试重启操作,并在3次尝试失败之后能够将操作结果通知到系统运维人员,从而保障IT应用在运行过程中出现异常能够及时发现和处理,系统运行稳定可靠,提升用户感知。

1.3 监控系统自监控

对于监控系统本身相关服务运行状态的监控,在出现异常时能够对监控系统做简单的自动化处理,保障监控系统的稳定运行,从而避免对IT应用的监控失效的情况。

1.4 异常情况通知

在监控系统对IT应用持续不间断的监控过程中,发现的异常能够通过生成告警的形式通知系统的运维人员,通知方式包括但不限于短信通知、邮件通知等多重方式,其中以邮件通知为主,将多个告警异常的信息进行合并,一次发送。

2 系统设计

2.1 架构设计

该系统主要由服务器监控和IT应用监控处理两部分组成。服务器监控通过Zabbix监控方案来实现,服务端程序是Zabbix Server,部署在应用监控系统主服务器上;客户端是Zabbix Agentd,在所有被监控服务器上均需要部署。IT应用监控发生异常或有需要用户关注处理信息时,该程序根据对应的通知策略判断是否需要对运维人员进行通知并进行后续处理。

被监控的主机上需部署Zabbix客户端程序,该程序周期性上报主机监控结果,以及时发现运行过程中发现的主机问题,并通过异常情况通知程序按照设置好的通知策略通知具体运维人员;同时为保障该系统的稳定运行,增加了服务端监测程序和客户端监测程序,周期性监测服务端和客户端程序运行状况,在出现异常时尝试进行自动重启等类似的方式进行系统恢复操作。

IT应用监控处理程序,负责对IT应用进程状态及运行日志进行检查,捕获IT应用运行过程中的异常信息,同时对异常应用做简单处理尝试自动恢复,在处理完毕之后对应用进行再次检查,并将检查结果再次反馈至Zabbix服务端进行后续异常情况通知等操作。

2.2 功能模块设计

2.2.1 服务器监控模块设计

Zabbix具有非常完备的服务器监控方案,故本系统服务器监控模块通过Zabbix的功能来实现。为了能够检测分布在不同网络的服务器主机,需要Zabbix客户端以主動式的方式运行,同时确保监控系统主服务器可被Zabbix客户端通过IP寻址。Zabbix客户端在运行时,会周期性的向Zabbix服务端请求需监控项目,之后通过10051端口将采集到的监控数据传送给Zabbix服务端。

2.2.2 IT应用监控模块设计

IT应用监控处理程序,不依赖于Zabbix自身功能,相对独立,主要负责对IT应用自身的监控,监控的内容包括进程是否存活、日志刷新是否正常、日志中是否存在错误关键字等。该程序有基础的系统自愈能力,能够自动进行部分简单的操作尝试对异常自行恢复。(图2)

2.2.3 监控系统自监控模块设计

监控系统自监控模块用于保障Zabbix服务端和客户端程序的正常运行,并且在检查到程序没有运行时,会自动尝试启动程序。由于需要监控的内容包括Zabbix服务端和客户端,实际上该模块包括两部分程序。

①Zabbix服务端监控程序。

由于Zabbix服务端程序仅能在Linux平台运行,在此通过编写Shell脚本检查Zabbix服务端口开启状态,从而判断Zabbix服务端的运行状态,在检测到Zabbix服务端未运行时尝试再次启动服务端程序。由于对于服务端的检查需要周期性进行,在此通过Linux平台的Crontab程序来实现。

②Zabbix客户端监控程序。

Zabbix客户端与Zabbix服务端的监控程序设计思路类似。与服务端监控不同的是,Zabbix客户端还可以运行在Windows平台上。Linux平台的Zabbix客户端监控实现和服务端一致;在Windows操作系统中,Zabbix客户端的运行状态检查通过批处理脚本进行,客户端的周期性检查通过操作系统的任务计划进行。

3 系统功能实现

3.1 服务器监控模块功能实现

服务器的监控功能通过Zabbix提供的解决方案来实现,该方案是在应用监控系统主服务器上安装Zabbix服务端,被监控主机安装Zabbix客户端,并配置Zabbix客户端工作方式为主动式监控,配置参数是StartAgents,数值配置为0,以禁用被动模式。工作流程如图3。

3.2 IT应用监控功能实现

IT应用监控的目的是及时发现应用运行过程中出现的问题,并对运行状态数据进行收集和整理,为IT应用系统的后续优化提供资料参考。该功能通过perl脚本开发,使用mysql数据库存储检查结果数据,具体实现方式采用perl脚本调用系统命令的方式,目前通过该功能从以下方面监控IT应用的实时运行状态:

①应用进程监控:判断应用进程是否存在,用于基础的判断,并在发现进程不存在之后自动对应用进行重启,确保应用进程是正在运行的状态。

②应用日志刷新监控:对应用产生的日志最后更新时间进行检查,并根据预定的策略判断应用是否出现长时间未刷新,应用是否出现线程耗尽等情况,避免出现应用进程存在但实际已无法响应和对外提供服务的情况。

③应用日志关键字监控:对应用日志内容进行检查,判断最新的日志信息中是否有应用产生的错误信息,应用是否已经出现严重错误需要重启或者换人工干预的情况;应用运行过程中是否存在性能低下需要优化的情况等,并对该部分信息进行记录。

3.3 监控系统自监控功能实现

3.3.1 Zabbix服务端监控程序

通过编写shell脚本,监测本机的10050端口是否处于开启状态。如果没有,则判断为Zabbix服务端未运行,则使用服务启动命令尝试启动该服务。在完成shell脚本功能验证之后,为保证该监控能够周期性执行,需要将该脚本执行任务配置到Crontab列表中,如下所示为每5分钟执行一次:

*/5 * * * * /home/sysMonitor/monitor/host_monitor.sh

3.3.2 Zabbix客户端监控程序

Zabbix客户端监控程序需要支持Linux平台和Windows平台,其中Linux平台的监控程序和Zabbix服务端监控程序一致,同样是监控本机的10050端口是否开启来实现;Windows平台的监控程序通过批处理脚本实现,判断服务运行状态,并在出现异常时自动重启服务,批处理脚本的周期执行通过系统的任务计划配置,在系统启动时开始执行,每5分钟执行一次。

3.4 异常情况通知功能实现

3.4.1 短信通知程序

短信发送通常通过向第三方URL发送GET/POST请求,请求中包含用户认证和短信内容等信息实现的,不同第三方会有所区别。本系统则是通过调用第三方系统已经实现的短信发送Web服务接口,从而实现短信的发送。

3.4.2 邮件通知程序

邮件通知程序通常采用TCP连接SNMP邮件服务器发送邮件。本系统使用C#语言通过.NET中的MailMessage类来实现邮件发送功能。

4 结束语

随着服务器数量增长和应用复杂度的增加,传统的以纯人工为主的运维方式已不再适用,而通过应用监控系统则成为了当前的一种趋势。文中基于Zabbix设计的应用监控系统,运行高效,稳定可靠,自动化程度高,有效提升了IT应用的运维效率,减少了对于人员能力和数量的严重依赖性,具有良好的普适性。

参考文献:

[1]吴夫丹.基于云平台的服务器监控系统设计[D].西安:西安工业大学,2014.

[2]董波,沈青,肖德宝.云计算集群服务器系统监控方法的研究[J].计算机工程与科学,2012,34(10):68-72.

[3]朱瑞斌.服务器集群监控系统的设计与实现[D].北京:北京交通大学,2015.

[4]程明,李凡.基于开放架构的信息系统运维监控辅助支持系统关键技术研究与应用[C]// 2013电力行业信息化年会论文集,2013.

[5]VLADISHEV A. Zabbix: an enterprise-class open source distributed monitoring solution[EB/OL]. http://www. zabbix. com/[Accessed: 21-Juli-2010], 2007.