一、     为何需要监控系统

在一个IT环境中会存在各种各样的设备,例如,硬件设备、软件设备,其系统的构成也是非常复杂的。

多种应用构成复杂的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责。而要让这些应用能够稳定地运行,则需要专业IT人员进行设计、架构、维护和调优。在这个过程中,为了及时掌控基础环境和业务应用系统的可用性,需要获取各个组建的运行状态,如CPU的利用率、系统的负载、服务的运行、端口的连通、带宽流量、网站访问状态码等信息。而这一切都离不开监控系统。

                            spacer.gif

二、     监控系统的实现

一个监控系统的组成大题可以分为两部分:数据采集部分(客户端)和数据存储分析告警展示部分(服务器端)。这两部分构成了监控系统的基本模型。

数据采集的工作模式可以分为被动模式(服务端到客户端采集数据)和主动模式(客户端主动上报数据到服务端)。通常,大多数监控系统应该能同时支持这两种模式。被动模式对服务器的开销较大,适合小规模的监控环境;主动模式对服务器的开销较小,适合大规模的监控环境。

采集数据的协议方式可以分为两种:专用客户端采集和公用协议采集(SNMP/SSH/Telnet等)。

对于采集到的监控数据,可以将其存储到数据库或者文本或者其他方式,具体采用哪一种,应根据实际需求来决定。

对于一般的监控环境,被监控的节点不多,产生的数据较少,采用C/SClient/Server,客户端/服务端)架构就足够了,这种架构适合于规模较小、处于同一地域的环境。

对于大规模的监控环境,被监控的节点多,且监控类型多,监控产生的数据和网络连接开销会非常巨大,而且由于跨地域等多种因素,需要分布式的解决方案,常见的方式为C/P/SClient/Proxy/Server,客户端/代理端/服务端)架构,采用中间代理将大大提高监控服务端的处理速度,从而能支撑构建大型分布式监控的环境。

监控系统更重要的功能是告警和故障处理,这对及时解决问题和故障自愈非常重要。告警的时候,需要考虑到故障的有效汇报和集中汇报,防止出现告警洪水,即同一类告警信息重复大量地发送。

三、     监控系统的告警需求

支持多种方式,如短信、邮件、IM和其他接口。具备可定制化功能,对第三方告警介质提供可编程接口。这一点在很多场合非常重要,例如,将告警结果发送到专用的告警分析系统。

支持对告警内容的分析自动处理,防止误报、漏报,以及防止抖动。这一点对大多数监控系统都是一个值得挑战和研究的课题。例如,一个机房网络发生故障,按照常规警告内容,会收到无数条告警信息,内容是每个设备的故障,而对于更高级的告警信息,我们希望收到的是某机房存在网络故障,受影响的设备的IPx.x.x.x~x.x.x.x,受影响的业务是xxx”,这样做的目的是让告警信息更智能、更有效,防止告警炸弹的产生。

四、     监控系统的开源软件现状

在监控软件中,开源的解决方案有流量监控(MRTGCactiSmokingPingGraphite等)和性能警告(NagiosZabbixZenoss CoreGangliaOpenTSDB等)可供选择,并且每种软件都有自己的特点和功能,各自的侧重点和目标不完全相同,在设计理念和实现方法上大同小异,但都具有共同特征,例如,采集数据、分析展示、告警以及简单的故障自动处理。最终都能达到对IT系统服务可用性的一个完全展示。

1.     Cacti

Cacti是一套基于PHPMySQLSNMPRRDtool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用RRDtool绘图,但使用者无须了解RRDtool复杂的参数。他提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、主机设备以及任何一张图,还可以与LDAP结合进行用户认证,同时也能自定义模版,在历史数据的展示监控方面,其功能相当不错。

spacer.gif

Cacti通过添加模版,使不通设备的监控添加具有可复用性,并且具备可自定义绘图的功能,具有强大的运算能力(数据的叠加)。

2.     Nagios

Nagios是一个企业级的监控系统,可监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数及服务,同时提供异常告警通知功能等。

Nagios可运行在LinuxUnix平台上,同时提供一个可选的基于浏览器的Web界面,以方便系统管理人员查看网络状态、各种系统问题,以及日志等。

Nagios的功能侧重于监控服务的可用性,能及时根据处罚条件告警。

目前Nagios也占领了一定的市场份额,不过Nagios并没有与时俱进,已经不能满足于多遍的监控需求,架构的扩展性和使用的便捷性有待增强,其高级功能集成在商业版当中。

spacer.gif

3.     Zabbix

Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent,也可以支持SNMPIPMIJMXTelnetSSH等多种协议,它讲采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发警告。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。相对来说,它的总体功能做得非常优秀。

spacer.gif

随着云计算、虚拟化的大规模应用,以及未来移动互联网、物联网等的兴起,Zabbix的使用将越来越广泛,引用场合也越来越多。目前,不少互联网公司、云计算公司、系统集成软件公司、外包服务公司等,都有对Zabbix进行二次开发和大规模使用。

Zabbix适合中小型企业、大中型企业的用户使用。单个Server节点可以支持上万台设备,每秒可以处理1.5万次请求,理论上可以支持5万台设备。

Zabbix是一个企业级的高度集成开源监控软件,提供分布式监控解决方案,可以用来监控设备、服务等的可用性和性能,其产品部分企业版和社区版,是一个真正的源代码开放产品,用户可以自由下载并使用该软件。

Zabbix SIA公司是Zabbix的官方技术团队成立的公司,其运作模式是商业软件的开源——软件的使用免费,服务收费。其为用户提供咨询、技术支持服务(定制开发、解决方案、人员培训等)。

五、     选择Zabbix的理由

对比同类监控产品,有以下理由选择使用Zabbix

  1. 1.  Zabbix是一个自由开放源码的产品,用户可以对源代码进行任意修改和二次开发。

  2. 2.  安装和配置简单,用户仅仅需要一些简单的学习,即可完成监控的搭建工作。

  3. 3.  搭建环境简单,基于开源软件构建平台,仅需要Linux、Apache/Nginx、MySQL/PostgreSQL/Oracle、PHP即可,无须专用操作系统支持,也无须专用硬件。

  4. 4.  Zabbix-Agent完全支持Linux、Unix、Windows、AIX、BSD和Solaris的监控,Server和Agent都采用C语言编码,对系统的资源占用非常小,数据采集的性能和速度非常快。

  5. 5.  将数据采集持久存储到数据库,便于对监控数据的二次分析。

  6. 6.  非常丰富的扩展能力,很轻松地自定义监控项和实现数据采集,几乎能监控所有的数据。例如,可以监控网站的访问次数,监控UPS和天气温度等。毫不夸张的说,在Zabbix的世界里,往往有你想不到的事情,没有办不到的事情。

  7. 7.  开源社区的运作模式,有各种论坛、邮件列表、IM及时沟通等。

因此,如果你是一个系统管理员、网络管理员和运维人员,想要构建一套自己的监控系统环境,Zabbix将会是最佳的选择。如果你是开发人员,想基于开源软件开发一套属于自己的监控系统,Zabbix也是比较好的选择。

六、     Zabbix的架构

Zabbix支持多种网络方式下的监控,可通过分布式的方式部署和安装监控代理,整个架构如下图所示。

spacer.gif

七、     Zabbix的功能特性

Zabbix有常见的商业监控软件所具备的功能,如主机的性能监控、网络设备性能监控、数据库性能监控、FTP等通用协议监控、多种告警方式、详细的暴表图表绘制、分布式、可扩展能力、API等。

  1. 数据收集

  2. l  支持AgentSNMPIPMIJMXSSHTelnet等。

  3. l  自定义的检测。

  4. l  自定义收集数据的频率。

  5. 灵活的触发器

  6. l  可以定义非常灵活的告警阀值和多种告警相关联的条件。

  7. 高度可定制的警告

  8. l  发送通知,可定制包括告警级别、动作升级、收件人和媒体类型。

  9. l  通知可以使用全局宏变量和自定义变量。

  10. l  自动处理功能包括远程命令的自动调用和执行。

  11. 实时绘图功能

  12. l  监控项将数据实时绘制在图形上。

  13. Web监控能力

  14. l  Zabbix可以模拟浏览器请求一个网站,并检查返回值和响应时间。

  15. 多种可视化展示

  16. l  可以自定义监控的展示图,将多种监控数据集中展示到一张图中。

  17. l  网络拓扑图。

  18. l  自定义的ScreensSlide shows可以将多种图形集中展示。

  19. l  报表功能。

  20. l  资源使用情况的监控展示。

  21. 历史数据的存储

  22. l  数据存储在数据库中。

  23. l  历史数据的存放周期可配置。

  24. l  定期删除过期的历史数据。

  25. 配置非常容易

配置比较简单,只需要以下两步即可。

第一步:添加设备。

第二步:应用模版即可完成监控。

  1. 使用模版

  2. l  模版可以分组。

  3. l  模版具有可继承性。

  4. 网络发现

  5. l  支持自动发现网络设备和服务器。

  6. l  Agent自动注册。

  7. 快速的访问接口

  8. l  Web页面基于PHP

  9. l  远程访问。

  10. l  日志审计。

  11. API功能

  12. l  应用API功能可以方便地和其他系统结合,包括手机客户端的使用。

  13. 系统权限

  14. l  不通的用户展示监控的资源不同。

  15. l  对用户的身份认证。

  16. 程序特性

  17. l  C语言编写,其性能和内存开销非常小。

  18. 大型环境的支持

  19. l  利用Zabbix-Proxy方式即可轻松构建远程监控。