第1章 Zabbix简介
第1.1节 系统监控需求
在互联网的应用中,我们大量的使用网络和服务器来完成项目平台的搭建,在系统运维过程中,我们需要获取很多网络和服务器运行的信息,比如:网络流量、主机CPU 使用率、主机内存使用率、主机磁盘使用率等。这些信息我们可以通过网络或主机设备上的命令行指令获取,但这样很不方便,尤其是主机和设备非常多的情况下获取这些信息。想象一下我们管理的是由1000 多台物理服务器和50 多台网络交换或路由设备组成的一个私有云,如果我们需要人工的获取这些服务器和设备的运行状态、网络流量和服务状态是非常耗时且无法完成的。更不要说在这1000 多台物理服务器上运行着3000 或更多的虚拟服务器,每个服务器上又运行着相互关联的负责均衡集群、分布式计算集群、分布式存储集群、高性能计算集群等复杂的应用集群方案。我们必须实时的获取它们的运行状态,并且分析在过去1 小时、24 小时、1 周、1 月、1 年的数据变化趋势。我们需要获取和保持这些数据并且在需要的时候能够方便的展示出它们的可视化视图。
不仅仅是获取实时的运行数据,我们还需要有一套完整的报警机制。在服务器、网络设备、资源服务、业务逻辑等出现异常的时候可以通过WEB、邮件、短信、电话等方式自动化的通知管理人员。这种报警机制必须是可配置的,可以根据我们系统应用的具体情况做出合理的方案,比如设置CPU 使用阀值、报告内存突然的增长、服务器流量异常、应用服务负载异常、集群服务故障迁移等等情况。
随着项目的的推进,我们还需要通过分析记录数据预估出未来可能需要的资源容量,例如服务器数量是否需要增添及何时增添、网络带宽是否出现瓶颈及何时增添、应用服务器是否需要平行宽展及何时扩展等等。这些都需要大量且长期的数据分析支撑,也就是长期有效的系统监控数据支撑。
第1.2节 常见监控解决方案
早期,网络环境中的设备数量尚且不多的时候,人们需要监控的仅仅是几台服务器、一些交换机以及少量的其他设备。首先就需要有方法将人们关心的各项数据从设备中提取出来,然后再考虑如何集中化的展示出来。
为了满足提取各项数据的需求,互联网工程工作小组(IETF,Internet Engineering Task Force)定义并发布了简单网络管理协议(SNMP)。该协议能够支持网络管理系统,用以监控连接到网络上的各种设备。Linux系统当然也支持该协议。人们可以使用SNMP协议获取主机CPU、内存、磁盘、网卡流量等数据,很多商业网络设备如路由器、交换机等基本也支持SNMP协议。
最初,人们用脚本将获取到的SNMP数据存入数据库中,然后再使用一种名为MRTG的软件根据获取的数据绘制图表来分析数据的变化。MRTG(Multi Router Traffic Grapher),顾名思义,这款软件最初是设计用于监控网络链路流量负载的。它可以用过SNMP获取到设备的流量信息,并根据这些信息绘制成图表并保存为PNG格式的图片,再将这些PNG图片以HTML页面的方式显示给用户。
不过,MRTG展示的页面和图表曲线相对简陋,它在一张图片中最多只能绘制两个数据的变化曲线,并且由于是PNG格式的静态图片,所以无法针对某一时间进行细化展示。为了解决这个问题,人们又开发了RRDTOOL工具。
RRDTOOL(Round Robin Database Tool)是一个强大的绘图引擎。RRDTOOL可以使用自己的环状数据库(RRD)来记录绘图数据,也可以使用关系型数据库,例如MySQL来纪录数据。利用RRDTOOL我们就可以将获取到的SNMP数据通过RRDTOOL进行实时绘图,这么一来,想看什么时候的数据,只要调取那个时间的监控数据,让RRDTOOL帮我们画一张图出来就可以直观又清晰的查看了。目前,几乎所有的开源监控软件都在使用RRDTOOL作为图形绘制引擎。
不过,直接使用RRDTOOL绘图操作起来很麻烦。同时,现如今的数据中心动辄成百上千的设备,一个个的去提取、绘制、监控显然是不现实的事情。况且,不同的设备监控的对象和方法也不同。有些数据依靠SNMP也提取不到(例如MySQL查询缓存命中率)。我们迫切的需要一个可以支持多种不同的监控手段,同时具有分类组织图形并且可以按照分类页面的方式展示这些图形的工具。另外,考虑到企业组织结构越来越复杂,参与监控的人员往往属于不同的部门或者工作组,不同的人也应该限定具有不同层级的监控浏览权限。除此之外,还有很多各种各样杂七杂八的需求不一而足。所以,现如今的监控软件不可以再像MRTG那样仅仅画张图就了事,还需要考虑更加丰富的功能。
Cacti 是一套基于PHP、MySQL、SNMP 及RRDTool 开发的监测图形分析工具。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、主机以及任何一张图,还可以与轻量级目录服务(LDAP)结合进行用户验证,同时也能自己编写模板,功能非常强大完善界面友好。可是随着设备的不断增多,Cacti 的运行机制就不能满足我们的需求了。Cacti 是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时,轮询的结果就不能即时的反应设备的状态了。
Cacti 监控关注的是对数据的展示,却不关注数据异常后的反馈。如果凌晨3 点的时候设备的某个数据出现异常,除非监控人员在屏幕前发现这个异常变化,否则是没有任何报警机制能够让我们道出现了异常。这个时候我们就需要一种可以根据我们预设阀值报警的工具。自动化监控报警服务有很多,其中商业应用比较昂贵且多以硬件为主,开源自动化监控报警服务中最著名的也是应用最广泛的是Nagios。
Nagios 是一款开源的免费网络监控报警服务,能有效监控Windows、Linux 和Unix 的主机状态,交换机、路由器和防火墙等网络设置,打印机、网络投影、网络摄像等设备。在系统或服务状态异常时发出邮件或短信报警第一时间通知运维人员,在状态恢复后发出正常的邮件或短信通知。Nagios 有完善的插件功能,可以方便的根据应用服务扩展功能。Nagios 可以使用服务-代理(Server-Agent)方式获取主机信息,也可以使用SNMP 方式获取设备信息。使用服务器-代理(Server-Agent)方式在每个主机上运行代理软件,主机上的代理软件主动提交数据信息,可以避免服务器轮询带来的延迟和非实时性等问题。
Nagios 已经可以支持由数万台服务器或上千台网络设备组成的云技术平台的监控,它可以充分发挥自动化运维技术特点在设备和人力资源减少成本。只是Nagios 无法将多个相同应用集群的数据集合起来,也不能监控到集群中特殊节点的迁移和恢复。一个新的监控服务根据这个需求被设计出来,它就是Ganglia。
Ganglia 是UC Berkeley 发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia 的核心包含gmond、gmetad 以及一个Web 前端。主要是用来监控系统性能,如:CPU 、内存、硬盘利用率,I/O 负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用,目前是监控HADOOP 的官方推荐服务。
Ganglia 分为服务器端、客户端和一个Web 前端,其中gmetad 是服务器端,gmond 是客户端。服务器端只有一个,而被监控服务器均安装客户端。Ganglia 采用Internet IPv4 类D 地址中的的组播进行数据请求。gmetad 发送一个请求到一个组播地址,由于使用组播
方式gmetad 只需发送一次请求包即可完成对所有gmond 的轮询。然后gmond 通过这个请求将采集到的数据返回给gmetad,gmetad 将数据保存在数据库中,通过RRDTool 绘制图表,然后通过Web 界面展示分类的页面。
第1.3节 Zabbix是什么?
Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
Zabbix由2部分构成,zabbix server与可选组件zabbix agent。zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台上。zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。zabbix agent可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows (2000/2003/XP/Vista)等系统之上。
zabbix server可以单独监视远程服务器的服务状态;同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(agent方式),同时还可被动接zabbix agent发送的数据(trapping方式)。另外zabbix server还支持SNMP (v1,v2),可以与SNMP软件(例如:net-snmp)等配合使用。
相比较Cacti,Zabbix具有不亚于Cacti的图形表现效果,同时还支持监控报警功能。并且内置的监控模板比Cacti要丰富的多得多。
相比较Nagios,Zabbix安装配置要简单的多,利于实现。同时学习成本也要低得多。在监控性能方面也不亚于Nagios。
因此,目前越来越多的公司开始使用Zabbix作为监控的最佳解决方案。
第1.4节 Zabbix的优缺点
优点:
开源,无软件成本投入
Server 对设备性能要求低
支持设备多,自带多种监控模板
支持分布式集中管理,有自动发现功能,可以实现自动化监控
开放式接口,扩展性强,插件编写容易
当监控的item 比较多服务器队列比较大时可以采用被动状态,被监控客户端主动从server 端去下载需要监控的item 然后取数据上传到server 端。这种方式对服务器的负载比较小。
Api 的支持,方便与其他系统结合
缺点:
需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据据很大,瓶颈主要在数据库。