admin 管理员组文章数量: 887016
2024年3月29日发(作者:异步fifo怎样实现跨时钟域处理)
基于Zabbix的网络监控系统
赵哲;谭海波;赵赫;王卫东;李晓风
【摘 要】With the increasing of applications in distributed servers,how to
effectively monitor the servers distributed in different parts and the
running status of applications and be able to timely inform the managers
when faults occured,is the problem that most Internet companies will
confront. For this,we design a network monitoring system based on
Zabbix,which can effectively monitor the servers and applications in
distribution of different networks. This system is so stable and universal
that it can be used to monitor servers and applications in enterprise. It
includes four parts containing server monitoring,application
monitoring,stability support and alarm module. The server monitoring is
based on Zabbix,while the application monitoring is based on the error
collection module. The stability support module is used to monitor the sys-
tem itself,and the alarm module provides a variety of efficient alarm
channels. In the event of a failure,the system can inform managers in a
timely manner to help managers quickly locate and solve
problems,extremely improving work efficiency.%随着分布式服务器的应用程
序数量的不断增长,如何有效地监控分布在不同区域的服务器和应用程序的运行状
况,能够在故障发生时及时地告知管理人员,是大多数互联网企业都会面临的问题.对
此,文中设计了一种基于Zabbix的网络监控系统,能够有效监控分布在不同网络中
的服务器和应用程序,具有较好的稳定性和普适性,可以广泛应用于企业的服务器和
应用程序的监控中.该系统包括服务器监控、应用程序监控、稳定性保障和告警模
块四部分,其中服务器监控通过Zab-bix实现,应用程序监控通过错误收集模块实现,
稳定性保障模块用于监控系统自身,告警模块提供了多种高效的告警渠道.当故障发
生时,该系统可以及时地通知管理人员,帮助管理人员迅速地定位和解决问题,极大地
提高了工作效率.
【期刊名称】《计算机技术与发展》
【年(卷),期】2018(028)001
【总页数】6页(P144-149)
【关键词】监控;Zabbix;分布式;服务器;应用程序
【作 者】赵哲;谭海波;赵赫;王卫东;李晓风
【作者单位】中国科学院安徽光学精密机械研究所,安徽 合肥 230031;中国科学技
术大学,安徽 合肥 230026;中国科学院安徽光学精密机械研究所,安徽 合肥 230031;
中国科学院安徽光学精密机械研究所,安徽 合肥 230031;中国科学院安徽光学精密
机械研究所,安徽 合肥 230031;中国科学院安徽光学精密机械研究所,安徽 合肥
230031;中国科学技术大学,安徽 合肥 230026
【正文语种】中 文
【中图分类】TP302.1
0 引 言
随着信息技术的不断发展,要处理的信息量不断增长,应用的复杂度也在不断增加。
越来越多的互联网企业采用分布式服务器架构,不同的服务器提供不同服务,或者
多台服务器进行负载均衡,以提高系统的运行速度,为用户提供更好的体验[1-2]。
然而随着服务器数量的增加,系统发生故障的可能性随之增加。在系统发生故障时,
人工定位发生故障的机器是不大现实的[3]。如何设计一个安全、可靠、灵活的网
络监控系统,在系统发生故障时,能够准确地将服务器地址、故障信息发送给系统
的管理人员,是大多数互联网企业都会面临的问题[4]。
成熟的系统监控解决方案有很多,但商用的服务器监控软件往往价格昂贵,并且灵
活性不够高。开源软件具有很好的社区支持,且插件丰富,可扩展性强,企业只需
在开源软件的基础上进行简单配置或二次开发即可满足自身需求,可节省大量的人
力和物力。企业常用的开源监控软件有Zabbix[5]、Nagios[6]、Cacti[7]等。与其
他监控系统相比,Zabbix具有更加详细的开发文档和更好的中文支持。因此文中
在开源Zabbix系统的基础上设计监控系统,使用Zabbix对服务器主机的软硬件
参数进行监控,然后开发独立模块对应用程序运行过程中可能发生的故障进行监控。
1 系统分析
1.1 服务器故障监控模快
服务器监控包括服务器主机的CPU、内存、磁盘等硬件参数和IIS、Apache、
MySQL、RabbitMQ等软件参数的监控,是整个监控系统的核心。出于安全性和
性能的考虑,企业中的服务器往往分布在不同地区,并不在同一个子网内。因此,
系统监控平台要能够监控到分布在不同子网的主机,就需要具备公网IP,由被监
控主机向监控平台主动上传监控信息。只要被监控主机连接了因特网,就可以通过
系统监控平台的公网IP建立TCP连接,传输该主机的硬件、软件的监控信息。监
控平台通过主机名来标识不同的主机,收到监控信息之后会判断是否存在相应的告
警策略,并分类进行存储和展示[8]。
1.2 应用程序错误监控模块
除了服务器主机会发生故障,应用程序在运行过程中,也会遇到执行错误的情况,
因此相关的错误监控机制是必须的。传统的方式是将该错误记录在日志中,待用户
或测试人员发现问题之后,通过分析日志再去定位错误。应用程序错误监控模块则
能够在应用程序执行过程中,收集到应用程序运行中的错误,直接执行相应的告警
策略,将错误信息发送给对应的管理人员。与传统的错误处理方式相比,应用程序
错误监控更加及时有效,能够更好地保障应用程序的运行。
1.3 稳定性保障模块
系统监控平台不但能够监控服务器故障和应用程序的错误,还应该具有一定的稳定
性保障,能够保证自身稳定的运行。系统监控平台的监控策略应该是双向的,而不
是单向的。不但需要系统监控平台去监测服务器主机的运行,还需要服务器主机监
控系统来监测系统监控平台的正常运行。此外,还需要设计相关的自检程序,来保
障系统监控平台中客户端和服务器的稳定运行。
1.4 告警模块
监控平台的告警是非常重要的一步,它直接关系着管理人员能否及时地知悉错误的
发生。监控平台应在故障发生时,通过多种渠道通知运维人员,包括短信、邮件、
微信、QQ等方式。其中,邮件是较为常用的一种告警方式,可以通过多种方式实
现。短信是最为有效的告警方式,需要借助第三方短信运行商,支付费用才能使用。
随着QQ和微信等社交软件的普及,通过社交软件告警也成为了一种很好的补充
方式,QQ和微信消息的发送可以通过一些开源项目来实现。
2 系统设计
2.1 系统架构设计
如图1所示,该系统主要分为服务器主机故障和应用程序错误监控两部分。主机
监控通过开源的Zabbix监控方案实现,其中Zabbix Server是Zabbix的服务端
程序,工作在系统监控平台服务器;Zabbix Agentd是Zabbix的客户端程序,
工作在被监控服务器。应用程序错误监控通过错误收集接口来接收应用程序在发生
错误时发送过来的HTTP请求,然后记录错误信息并执行相应的告警策略。
图1 系统架构
被监控的主机都需要安装Zabbix Agentd程序,系统监控平台则安装Zabbix
Server程序。Zabbix Agentd以一定的频率向Zabbix Server传送监控数据[9-
10]。为了保障Zabbix系统的运行,还设计了Zabbix Agentd和Zabbix Server
自检程序以及Zabbix Server的远程监控程序。Zabbix Agentd自检程序用于监
控Zabbix Agentd程序,并在Zabbix Agentd没有运行时启动该程序。Zabbix
Server自检程序与之类似,用于检测本机Zabbix Server的运行。Zabbix Server
远程检测程序则用于在远程服务器上监控Zabbix Server的运行状态。
应用程序错误监控用于检测应用程序运行过程中发生的错误。应用程序的开发者在
捕捉到程序错误信息时,不但可记录在本地的日志中,还可以通过HTTP请求的
方式将错误信息发送到错误收集接口。接口在收到有效的HTTP请求后,会将错
误信息记录在本地数据库中,并检查是否存在相关告警策略,如果有的话则发送告
警信息。
2.2 系统功能模块设计
2.2.1 服务器监控模块设计
Zabbix是一套非常完备的服务器主机监控解决方案,因此通过Zabbix来实现服
务器监控模块。Zabbix Agentd有主动和被动两种工作方式,其中主动式监控是
指Zabbix Agentd通过Zabbix Server的IP地址和端口号与之建立TCP连接,
然后传输监控的配置信息和被监控主机的信息;被动式监控则是指Zabbix Server
通过Zabbix Agentd的IP地址和端口号与之建立TCP连接[11]。为了能够检测
分布在不同区域、不同网络环境中的服务器主机,使Zabbix Agentd以主动式的
方式运行,只需要保证监控平台具有公网IP,可被Zabbix Agentd通过IP寻址
即可。Zabbix Agentd在被监控主机上运行时,会以一定频率向Zabbix Server
请求需要监控的项目,然后通过监控平台的10051端口将监控数据传送给Zabbix
Server。Zabbix解决方案提供了基于PHP和MySQL的Web管理站点,通过该
站点可以添加被监控的主机,配置需要监控的项目,以及相关的报警联系人和告警
方式及策略等。
2.2.2 稳定性保障模块设计
稳定性保障模块用于保证Zabbix Server和Zabbix Agentd程序的正常运行,在
检测到程序没有运行时,会尝试启动程序或发送告警。因为Zabbix Agentd的远
程监控可以通过Zabbix的监控项实现,所以实际上该模块包括三部分程序。
(1)Zabbix Server自检程序。
Zabbix Server只能运行在Linux平台上,并且默认工作在10051端口。因此,
可以通过Shell脚本监测本机10051端口是否开启,进而判断Zabbix Server的
运行状态,并且检测到Zabbix Server没有运行时启动该程序。通过shell脚本实
现的Zabbix Server自检程序需要以一定的频率执行,可使用Crontab程序来实
现。
(2)Zabbix Agentd自检程序。
Zabbix Agentd与Zabbix Server的自检程序设计思路是类似的。与之不同的是,
Zabbix Agentd可运行在Linux平台和Windows平台,默认工作在本机的
10050端口。在Windows操作系统中,Zabbix Agentd是以系统服务的形式运
行的,可以使用C#语言编写自检程序,用于检测Zabbix Agentd服务的运行状
态,并且在没有运行时启动该程序。在Windows平台,使用C#语言编写的
Zabbix Agentd自检程序,可以通过定时器实现定期的检测[12]。
(3)Zabbix Server远程监测程序。
Zabbix Server通过监控平台的10051端口来收集Zabbix Agentd发送过来的监
控数据。因此可以在其他的服务器上通过与监控平台的10051端口建立TCP的方
式,来检测Zabbix Server运行状态。如图2所示,每2分钟检测一次,如果连
续三次向监控平台的10051端口建立TCP连接失败,则认为Zabbix Server程序
已停止。出于安全性考虑,远程服务器不具备启动Zabbix Server的权限,仅发
送告警,通知管理人员处理。
图2 Zabbix Server远程监测程序流程图
2.2.3 应用程序监控模块设计
应用程序监控模块通过错误收集接口的形式对外开放,可以通过HTTP请求的方
式调用。该模块相对独立,不依赖Zabbix的功能,使用PHP和MySQL进行开
发,但为了统一管理界面,将该模块合并到Zabbix的管理站点。如图3所示,错
误收集接口在收到有效的HTTP请求后会检查是否存在相关的告警策略,如果有
则向联系人发送短信、邮件等通知。发送短信、邮件等操作是比较耗时的,因此为
了提高错误收集接口的响应速度,只验证HTTP请求是否有效,对于有效的HTTP
请求,将相关参数放入消息队列中。编写错误信息处理脚本,监听消息队列,专门
用于执行发送邮件、短信等告警操作。
3 系统实现
3.1 服务器监控模块的实现
服务器的监控模块通过Zabbix解决方案实现,需要在系统监控平台上安装
Zabbix Server程序,在被监控主机安装Zabbix Agentd程序,并以主动式监控
的方式工作。如图4所示,使用Zabbix Server的Web管理平台,还需要在系统
监控平台上搭建LNMP运行环境,然后将站点代码复制到Web服务器目录。
Zabbix Agentd主动式监控配置内容如下:StartAgents=0表示禁用被动模式,
ServerActive对应Zabbix Server的IP地址,Hostname用于标识不同的主机
[13]。
图3 HTTP请求处理流程
图4 Zabbix Server Web管理界面
StartAgents=0
ServerActive=
Hostname=host1
工作流程如图5所示。
图5 服务器监控模块工作流程
3.2 稳定性保障模块的实现
(1)Zabbix Server自检程序。
通过编写运行在Linux下的shell脚本,监测本机的10050端口是否已经开启。
如果没有,则说明Zabbix Server没有运行,通过shell脚本启动该服务即可。在
编写完该shell脚本之后,还需要将其添加到Crontab列表中,每分钟执行一次
该脚本。
*/1 * * * * /var/www/Zabbix_Server_
(2)Zabbix Server远程监测程序。
Zabbix Server远程监控程序可运行在被监控服务器上,通过尝试向Zabbix
Server所在的系统监控服务器的10051建立TCP连接,来判断Zabbix Server
程序是否可用。以Windows Server 2012为例,在Windows平台上可以使用
C#编写Windows服务,具有更好的稳定性。关键代码如下:
t(new IPEndPoint(ip,10051));
if(counter>3){
SendMail(server_addr,mailto);
}else{
counter=0;
}
(3)Zabbix Server远程监测程序。
Zabbix Server远程监控程序可运行在被监控服务器上,通过尝试向Zabbix
Server所在的系统监控服务器的10051建立TCP连接,来判断Zabbix Server
程序是否可用。以Windows Server 2012为例,在Windows平台上可以使用
C#编写Windows服务,具有更好的稳定性。关键代码如下:
t(new IPEndPoint(ip, 10051));
if(counter > 3){
SendMail(server_addr, mailto);
}else{
counter=0;
}
(4)Zabbix Agentd自检程序。
Zabbix Agentd自检程序可运行在Linux和Windows平台上,Linux下的自检
程序可以编写shell脚本,通过检测本机10050端口是否可用来实现;Windows
下自检程序可以使用C#语言编写服务,检测Zabbix Agentd服务的运行状态。
使用C#语言编写Zabbix Agentd自检服务,每分钟检测一次Zabbix Agentd服
务的状态,并设置为开机启动。
关键代码如下:
var service=new ServiceController("Zabbix Agentd");
string state=ng();
if(state!="Running")
{
();
rStatus(g);
}
3.3 应用程序监控模块的实现
为了统一管理平台,应用程序监控模块在Zabbix的Web站点的基础上使用PHP
语言进行开发,复用Zabbix站点的样式和用户登录模块。该模块的主要功能分为
错误信息收集接口、报警规则设置、错误信息处理三部分。为了提高接口的响应速
度,只判断请求是否有效,对于有效的请求,将有效参数以json格式存放到
Redis的消息队列中。错误信息处理脚本专门用于处理Redis队列中的内容,执行
发送邮件、短信等操作。错误信息收集接口验证数字签名的关键代码如下:
$tmp_arr=$_REQUEST;
$request_sign=strtolower($tmp_arr['sign']);
unset($tmp_arr['sign']);
ksort($tmp_arr);
$tmp_str=implode($tmp_arr);
$real_sign=md5($tmp_str.$skey);
if($real_sign!=$request_sign){
printJson(2003,'数字签名验证失败');
}
错误收集接口将有效的HTTP请求内容以及其告警规则存放在Redis中,错误处
理脚本从Redis中取出告警规则和请求内容,并执行发送短信、邮件等操作。
Redis队列使用其发布/订阅机制实现,错误处理脚本使用Subscribe方法订阅频
道errorList,然后Web API在收到合法请求时,使用Publish方法向频道
errorList发送数据。
//错误收集接口向消息队列中存入数据
$json_data=json_encode($valid_data);
$redis->publish("errorList",$json_data);
//错误处理脚本从消息队列中取出数据
$redis->subscribe(array("errorList"),"handleFun");
//错误信息错误函数
functionhandleFun($redis, $chan, $msg){};
工作流程如图6所示。
图6 应用程序监控模块工作流程
3.4 告警模块的实现
(1)邮件发送模块的实现。
邮件发送模块通过TCP连接SNMP邮件服务器发送邮件的方式实现。使用PHP
或C#语言与邮件服务器通过Socket建立TCP连接后,通过SNMP协议实现邮
件的发送。C#可以通过.NET中的MailMessage类来发送邮件,PHP则可以借助
第三方类库SendMail发送邮件[14]。
(2)短信发送模块的实现。
短信发送模块一般是通过向第三方提供的URL发送GET/POST请求,并携带用户
认证和短信内容等参数实现的,不同的第三方提供的URL和所需参数有所不同。
C#语言可以使用HttpWebRequest实现发送HTTP请求,PHP语言则可以利用
CURL扩展实现[15]。
(3)QQ消息发送模块的实现。
QQ消息的发送可以通过Mojo-Webqq实现,Mojo-Webqq是基于Perl语言实
现的开源项目,它默认运行在本机的5000端口,支持HTTP调用方式,使用方法
与短信发送类似。微信消息告警可基于Mojo-Weixin开源项目实现,使用方法与
QQ消息告警类似。
4 结束语
随着服务器数量的不断增多和应用程序复杂度的增加,传统的人工管理方式已不再
适用,网络监控系统则成为一种新的趋势。文中设计的基于Zabbix的网络监控系
统,高效、稳定、自动化运行,有效解决了服务器故障和应用程序错误监控的问题,
具有很好的普遍性。该系统通过Zabbix Server的自检程序和远程监测程序一定
程度上保障了系统的稳定性,但还是存在单点故障的隐患。在未来的工作中,将致
力于系统监控平台的负载均衡和系统灾备等工作,以更好地保障监控系统的稳定性
[16]。
参考文献:
[1] 吴夫丹.基于云平台的服务器监控系统设计[D].西安:西安工业大学,2014.
[2] 董 波,沈 青,肖德宝.云计算集群服务器系统监控方法的研究[J].计算机工程与
科学,2012,34(10):68-72.
[3] 朱瑞斌.服务器集群监控系统的设计与实现[D].北京:北京交通大学,2015.
[4] 张俊杰.服务器状态监控系统设计[D].西安:西安电子科技大学,2014.
[5] TADER monitoring with Zabbix[J].Linux
Journal,2010,2010(195):7.
[6] 王 帆.基于Nagios的服务器监控平台构建与实现[J].实验室研究与探
索,2010,29(12):51-57.
[7] 岑锐坚.使用Cacti监测系统与网络性能[J].开放系统世界,2006(7):68-72.
[8] 徐 叶,袁 敏,李国军.嵌入式Web服务器远程监控系统的设计与实现[J].计算
机与现代化,2013(2):94-98.
[9] 郭晓慧,李润知,张 茜,等.基于Zabbix的分布式服务器监控应用研究[J].通
信学报,2013,34:94-98.
[10] 李朝阳.利用Zabbix进行系统和网络管理[J].计算机时代,2008(10):19-22.
[11] VLADISHEV A. Open source enterprise monitoring with
Zabbix[C]//OpenSource data center conference.[s.l.]:[s.n.],2009.
[12] 杜 鹃.飞信机器人系统的设计与实现[D].北京:北京邮电大学,2010.
[13] 周 萌,林国策,杨厚云.CENTOS下ZABBIX的配置与使用[J].北京信息科技
大学学报:自然科学版,2015,30(1):90-94.
[14] 李艳霞,刘乃嘉,王 鑫.高校信息系统自动监控报警平台的研发与应用[J].实验
技术与管理,2011,28(3):101-103.
[15] 杨 磊.基于Linux系统的监控工具与其自动化测试的设计与实现[D].成都:电
子科技大学,2012.
[16] ANDREOLINI M,COLAJANNI M,PIETRI M.A scalable architecture for
real-time monitoring of large information systems[C]//Second symposium
on network cloud computing and applications.[s.l.]:IEEE,2012:143-150.
版权声明:本文标题:基于Zabbix的网络监控系统 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1711673263h608341.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论