5.1.1Cacti
-
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。
-
简单的说Cacti就是一个PHP程序。
-
主要是对网络进行一个监控,比如:网络交换机,网络油量等一个监控。
-
它通过使用SNMP协议获取远端网络设备和相关信息,(其实就是使用Net-SNMP软件包的snmpget和snmpwalk命令获取)并通过RRDTOOL工具绘图,通过PHP程序展现出来。使用它可以展现出监控对象一段时间内的状态或者性能趋势图。
-
它的主要作用是对网络油量的一个监控和绘制图形。
这个软件并不陌生,它是一个很古老的监测平台。
它检测的重点是在网络的流量进行分析,它会绘制出一个图形,实现方式就是简单的PHP程序,通过RRDTOOL工具实现绘图的功能,Cacti在很多年就已经出现,它的使用方式比较流行,最主要是它对网络的监控,比如对网络交换机,网络路由器等一些流量的监控使用的是非常多的,它的监控方式就是通过SNMP协议获取远端网络设备和相关信息,通过RRDTOOL工具实现了绘图的功能,像最常见的曲线图去展示它的运营状态。
网络流量检测的一个软件,比如后续常见的Cacti加Nagios,通过把Nagios插件的形式结合到Cacti实现报警功能,这些都是它在后期的一些功能,核心功能就是对网络流量做一些分析,监控以及出图。
5.1.2Nagios
Nagios是一款开源的免费网络监视软件或者工具,监控面也是比较广的,会对各种操作系统平台,能有效监控Windows、linux和Unix的主机状态,交换机路由器等网络设置,打印机等。
它的重点并不是,数据收集和图形展示,这并不是它的强项,它主要当监控到这些出现一些问题的时候,它会进行一个报警策略。
Nagios的报警功能是非常完善的,可以基于主机的模版,或者用户组或者基于联系人组,在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
后续它也可以通过PHP,这样一个插件去实现网络绘图的功能,通过监控获取数据,通过PHP去绘图,这个功能相比较下比较弱。由于Nagios报警功能强大,用户量也是非常多的。
5.1.3 Zabbix
这个是目前最流行的一个监控工具。zabbix是一个基于wEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。Zabbix主要是把Cacti和Nagios的功能整合到一块去了,比如:第一块它会实现有一个很完善的一个绘图功能,同时它还间距了Nagios的功能,把错误进行报警显示。
在用户使用上它非常方便,它提供了一个web的用户界面,通过这个界面可以非常方便的添加一些信息,添加各种监控的属性,报警的设置,通过界面都可以去添加,不像Nagios要添加一个主机或添加一个服务,要通过文本编辑的方式,手工编辑的方式去添加,这样非常麻烦,如果机器少的话,手工编辑还可以。
但是如果机器成千上万台,就非常麻烦了,zabbix直接提供了一个web界面就可以进行简单的添加,这也是它流行起来最主要的一个原因,非常方便,扩充的插件也非常多,官方对历史版本的更新也非常快,这也是推动zabbix流行最主要的一个原因。
zabbix由2部分构成,客户端和服务端构成,服务端zabbixserver与可选组件客户端zabbixagent。
在每个要监控的服务器上面要装一个zabbixagent客户端,工作原理是zabbixagent发很多系统的相关信息到server端,server端它会把数据进行汇总通过一个web界面统一做展示,本身它的结构非常简单,它也支持相关的分布式,zabbix实现数据收集的方式也是有多种的,最常见的就是snmp。
zabbixserver可以通过SNMP,zabbixagent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AlX,FreeBSD,OpenBSD,OSx等平台上。它支持分布式,它可以监控任何平台。
5.1.4 Ganglia
Ganglia最初的设计思路是对一些高性能计算进行的一个处理。主要是对一个分布式的主机进行的一个监控。
主要的监控对象都是系统的资源状态,比如最常见的是cpu、内存、磁盘、I/o负载网络等。
系统默认有6个方面的数据情况。最重要的功能就是对数据的收集。
这方面跟Cacti的功能方面是类似的,主要做数据收集,它会把数据进行汇总,再通过web界面去做展示。
Ganglia是一款为HPC(高性能计算)集群而设计的可扩展的分布式监控系统,它可以监视和显示集群中的节点的各种状态信息,它由运行在各个节点上的gmond守护进程来采集cPU、内存、硬盘利用率、I/o负载、网络流量情况等方面的数据,然后汇总到gmetad守护进程下,使用rrdtool存储数据,最后将历史数据以曲线方式通过PHP页面呈现。
数据收集机制也是基于cs结构,也有一个客户端就是gmond,它是运行在每个要监控的主机上的这么一个进程,它会定时把主机信息做这样一个收集,服务端gmetad它是做每个客户端数据的一个汇总,它的汇总的方式与zabbix不一样,zabbix是通过agent把数据都汇报到server端,再进行统一汇总,Ganglia的机制是gmond端只管去做信息收集就可以,它把信息收集到本地之后,它就不再把server端进行汇报,server端gmetad进程它会定期去gmond端拉取数据,这个是跟zabbix不一样,反向去拉取数据,不是通过gmond直接把数据推过去,而是拉的方式,拉取可以选择的就去拉取,比较灵活。
Ganglia监控系统有三部分组成,分别是gmond客户端、gmetad服务端、webfrontendweb端主要是为集中去展示的这么一个数据服务。
5.1.5 Centreon
这个是主推的工具。一般叫它webNagios,它的实现机制和实现原理跟Nagios是一模一样的,没有任何差别,不同的是比如加一个主机加一个服务,要通过本文编辑的方式去完成,但是Centreon提供了一个非常强大的web界面,通过web界面就可以实现对主机对服务组对联系人组等等一系列的功能的设置,这个是推荐的最主要的一个原因,同时它也支持分布式架构,比如监控要跨多个机房,Centreon是首选的软件之一,它是各种分布式。
Centreon有两个版本,商业的企业版本和开源版本,在官方网站可以下载开源版本,它在安装使用上有点复杂,但是现在官方推出了一个ios镜像,它其实是基于系统的一个镜像,也是windows的操作系统,只不过是它在安装软件的过程全集中到ios里面,下载完之后,直接把ios文件装系统,直接打开服务器启动就可以自动启动了。
Centreon是一款功能强大的分布式IT监控系统,它通过第三方组件可以实现对网络、操作系统和应用程序的监控,实现机制就是首先,它是开源的,我们可以免费使用它;其次,它的底层采用nagios作为监控软件,
同时nagios通过ndoutil模块将监控到的数据定时写入数据库中,而Centreon实时从数据库读取该数据并通过web界面展现监控数据;
最后,我们可以通时Contraon签理和配署naainc成去说Centreon就是nagios的一个管理配置工具,通过centreon提供的web配置界面,可以轻松完成nagios的各种繁琐的配置。如果想要了解nagios的实现机制,可以把Centreon下载下来就可以马上去使用,而没有任何障碍,配置原理和配置方法跟nagios是一模一样的。
5.1.6 对比图
功能 | nagios | cacti | zabbix | Ganglia+centreon |
---|---|---|---|---|
管理方式 | 文本编辑 | web界面 | web界面 | web界面 |
数据展示 | PNP插件绘图 | RRD模式绘图 | PHP GD绘图 | RRD模式绘图 |
数据采集 | 插件模式 | SNMP/Scripts | 自身函数/插件 | ganglia专业收集/插件收集/支持C/PHP/SHELL/python接口 |
告警方式 | Email/自定义 | 命令/邮件 | 邮件/手机/第三方接口 | |
监控方式 | 手动建立 | 手动建立 | 自动发现/手动建立 | 自动发现/手动建立 |
管理功能 | 无 | 无 | 命令下发 | 命令下发/API |
监控结构 | 集中式/分布式 | 集中式 | 集中式/分布式 | 集中式/分布式 |
用户权限 | 简单 | 灵活的权限分配 | 灵活的权限分配 | 灵活的权限分配/支持角色/组 |
维护时间 | 有 | 无 | 有 | 有/支持多种维护模式 |
审计功能 | 无 | 无 | 精细化审计 | 精细化审计/支持历史查阅 |
汇总状态图 | 无 | 复杂,但效果好 | 简单 | 灵活/精确/支持自定义汇总 |
性能、扩展 | 差 | 很差. | 一般 | 优秀 |
-
管理方式
从各个方面进行对比,主要是在功能方面进行对比。这四款软件在哪些方面它的实现会更好,
关注的点:管理方式,数据采集,监控方式,用户权限,性能、扩展等方式来进行对比。在管理方式上nagios的管理方式就是文本编辑,添加主机,编辑文件,cacti就是web界面,zabbix也是web界面,Ganglia+centreon也有web界面。
所以在管理方式上就把nagios抛弃了。
-
数据展示
nagios主要是pnp插件实现绘制图形,pnp功能包括它的性能本身是有很多差别的,如果数量非常大,实际上获取到的性能也会大大下降,在绘图这方面nagios无疑是非常弱的一方面,而cactix是通过rrd模式非常传统的绘图,zabbix是非常强劲的,它是通过pnp gd模块去实现绘图,所以它的绘图方法各个方面都非常的强大,比如zabbix绘制图形非常灵活,可以通过不同维度去查看,这个就是用gd绘图实现方式,非常灵活。
Ganglia+centreon绘图方式也是传统的rrd,在数据展示绘图方面,zabbix是最强劲的。
-
告警方式
nagios是最强大的,通过邮件的方式或者自定义的方式都可以实现报警。cactix只能通过邮件的方式,zabbix也是可以通过命令或者邮件的方式实现报警,centreon底层就是基于nagios,所以Ganglia+centreon完全胜出的,因为它可以实现手机,邮件以及第三方接口的报警,至于配置方面直接在web界面做一个简单的配置就可以。
-
监控方式
nagios和cacti只能通过手动创建,不会自动或者被动报警这么一个方式,而zabbix和Ganglia+centreon是可以实现自动发现/手动建立的监控方式。非常灵活,在监控方式zabbix和Ganglia+centreon是胜出的。
-
监控结构
在这里胜出的是nangios,zabbix和Ganglia+centreon,但是在整体实用性Ganglia+centreon是最强劲的,因为如果有很多个服务器,超过5000台,或者更多的时候,Ganglia+centreon的性能就能很充分的发挥出来,因为它的分布式结构比zabbix更灵活,在性能表现上也会更好。
-
审计功能
nangios和cacti毫无疑问是没有的,zabbix它有非常详细的审计过程,对各种信息的记录,但是Ganglia+centreon是胜出的,它不仅可以支持各种精细化的审计,也可以通过各种维度去展示它的历史数据,这是比较看好的地方,因为通过各种图形的去展示一段时间之内监控的数据,拿数据去跟领导进行汇报。
-
性能、扩展
nangios是最差的,对于扩展是非常不方便的,如果机器多,文本编辑它本身就是一个很大的缺点,维护起来也会非常麻烦,cacti的设计思路就是单机的模式,所以它的性能跟扩展也是比较差的,中规中矩的就是zabbix,它支持分布式架构,但分布式架构实现起来有一定的难度,
如果在扩展很大,在性能上它会下降很快,之前也做过类似的性能扩展,发现在机器到达1000台之后,性能会有很大的下降,但是这不一定是官方数据,处理也不是很准,Ganglia+centreon曾经最高监控18000多台机器,非常稳定,所有文件的获取效果都在10s以内,对待每个客户端都可以在10s之内获取到最新的数据。
如果是初学者,建议使用zabbix的方式,因为它的安装包括使用都是非常便宜,况且服务器不是很多,如果监控到达了一定的规格,想往自动化方向去,也是建议使用zabbix,规模是在服务器在1000台之下,zabbix也是最好的选择。如果是超过1000台服务器,并且监控是跨机房多地域,那Ganglia+centreon是最好的选择,特别是监控有云主机,或者相关的大数据监控,只要打开开关,立刻就可以把数据收集起来。
nangios和cacati不建议去用,因为是时间比较就的了。
5.2 统一运维监控平台设计思路
5.2.1 监控平台的思路
做一个监控平台,不是通过一个软件或者两个软件就是一个监控平台,那么如何去设计一个适合自己的监控平台呢?
思路方面是非常重要的,要了解一个完善的监控平台具备哪些功能,包括用什么软件去实现,这个是必须去掌握的一个内容,通过这个思路可以看出来之前介绍的软件,比如nagions,zabbix,centreo,它仅仅是做统一监控平台的一个部分。
构建一个智能的运维监控平台,必须以运行监控和故障报警这两个方面为重点,将所有业务系统中所涉及的网络资源、硬件资源、软件资源、数据库资源等纳入统一的运维监控平台中,并通过消除管理软件的差别,数据采集手段的差别,对各种不同的数据来源实现统一管理、统一规范、统一处理、统一展现、统一用户登录、统一权限控制,最终实现运维规范化、自动化、智能化的大运维管理。
智能监控平台,设计架构从低到高可以分为6层,每层又分三个模块,监控报警模块,数据提取模块,数据收集模块。
用户展示管理层 | 同一用户管理、集中监控、集中维护 | 监控报警模块 监控报警模块 |
---|---|---|
报警事件生成层 | 实时记录报警事件、形成分析图表 | |
报警规则配置层 | 报警策略设置、报警阀值设置 | |
数据提取层 | 定时采集数据到监控报警模块 | 数据提取模块 |
数据展示层 | 数据生成曲线图直观显示 | 数据收集模块 |
数据收集层 | 网络数据、业务系统数据、数据库数据、操作系统数据 |
-
数据收集层
最底层是数据收集层,数据收集层的主要含义就是做数据的收集,第一步对系统本机的数据一个收据,比如操作系统的数据,网路,CPU,内存,磁盘等数据都要收集到。
做一个监控,这是基本的数据基础。还有一个是业务数据,它是在操作系统的业务之上,业务的数据也要收集起来,业务数据有很多,一部分包含日志,另外一部分是业务性能状态,比如技能状态,服务的状态,这是关于业务数据,还有一部分是数据库的数据,它主要涉及到数据库的状态,还有就是网络数据,比如网络带宽,网路io。
在整个监控平台里面做的一些基础的数据收集,在数据收集层,有四个数据是必须要收集到的,将数据收集到要对数据进行查看和判断。
-
数据展示层
数据收集之后,对数据进行查看和观看。怎么样才能清晰的判断呢?领导比较喜欢,比如柱状图、条形图、饼图等,领导和运维人员都比较喜欢这种数据显示。
数据展示层,通过手段比如程序的方式,把数通过曲线的方式展示出来,通过各种软件rdruce,jd,生成各种个样的图展示出来,这对数据人员,还是老板都是一个非常喜欢的方式。
-
数据提取层
数据收集到了,也展示到了,对用用户还是不够,关注的点是要把这些数据做一个对比,数据出现问题也要进行报警,如果要报警,怎么把数据进行提取呢?
数据收集到后肯定是要对数据进行提取,拿来对数据进行对比的。这就是第三层,数据提取层,就是把收集到的数据,利用一些插件,命令来提取出来把提取出来的数据进行对比,校验等操作。
这一层的作用是定时或实时采集数据,发送到报警规则配置层
-
报警规则配置层
数据提取完毕,就是报警规则配置层。数据已经提取到了,要对数据进行一个比对和验证。怎么样验证呢?
数据就有一个层次,对数据阀值的设置和比量,那就是第四层报警规则配置层,配置数值在什么时候是正常的,值要是超过阀值,就是不正常的,配置这些东西,把这些配置完,第四层的功能就完成了。
-
报警事件生成层
把规则配置完成之后是不是就完成了呢?
当然不是,还要做一些历史事件的查询,比如这周,这个月系统发生了多少次报警,这就是第五层报警事件生成层。应该比较专业的运维平台,就是要把每一次报警做一个记录。
纵观全局去判断,比如一个月多长时间内它的一个故障状态是什么样的,它的一个安全状态是一个什么样子的,这些都是要记录的。整体的一个思路是要考虑的,使用这个思路做一个报警系统,就是把每一次的报警进行归纳总结,然后在一年后做一个报表,给运维管理人员做一个参考,或者给领导的一个交代,这一年当中只发生一次两次的失误,安全率在99.99%,这也是对工作的一个肯定,所以在这个运维模块里面必须要有一个报警事件生成层,对所有报警事件做记录。
-
用户展示管理层
这些层在对用户的相关的结果,在最后要让用户能够去配置,去管理,必须要有和用户相关的接口ui,最后一层叫用户展示管理层。通过用户展示管理层,可以配这个展示报警的规则,也可以查看报警事件的生成结果去统一实现一个监控,统一实现一个维护,当然在这个用户展示层,也有用户角色的定义,比如在这个城市里面会定义多种用户,不同的用户,登陆到平台里面所展示的内容是不一样的,比如领导登陆进来之后,给它的第一个页面就是当前有多少台服务器在运行,一个月,三个月,五个月它的故障率是多少,都通过图形的方式给领导做一个展示,针对运维人员打开这个界面之后,看见的第一点就是服务器整个资源运营状态,哪个服务器有故障,关注的是这个点,这就是用户展示管理层,就是经常说的ui界面。
-
架构图
这六个层次如果是从纵向去区分,分成三大模块,第一层到第二层可以分为数据收集模块,第三层可以分为数据提取模块,第四五六层可以分为监控报警模块,报警规则去进行一个报警,并且进行一个事件的展示。
完整的监控报警平台就是要通过这六个方面三大模块去实现,
事件完成之后看一下部署的架构图
这个图是一个整体的拓扑图,刚才那个是设计图,在这个拓扑图上,主要是有三个模块组成。
左边最大的是一个数据收集模块,专门有一批数据收集服务器,主要作用就是在一堆服务器集群里面去收集各种各样的数据,汇总存储到数据收集服务器,另外一块是数据提取模块衔接数据收集模块和监控报警模块,它的作用是从数据收集服务器里面把数据根据规则提取出来,传到监控报警模块里面去,在这个监控报警模块里面可以设置一些报警规则,比如说设置一个报警的阀值,设置一个报警的策略,通过邮件报警,还是手机报警。策略都是在监控报警里面去进行设置的,整个架构基本就起来了,有做数据收集的,有做数据提取的,有做监控报警的。
架构图其实就是设计图当中的一个拓扑实现。这是关于统一报警监控平台的设计机制以及它的一个实现原理,通过这个图可以看到开源监控软件在哪一层实现,数据收集模块有比如常见的ccdi,Ganglia,都可以当数据收集模块来使用。数据提取模块比较隐蔽,比如zabbix就充当了一个数据提取模块的功能,监控报警模块zabbix ui就是监控报警模块,centreo也可以充当以恶搞监控报警模块,这是关于哪个软件在哪个层次可以实现。
关于数据提取模块,刚才在框架中有个Ganglia加centreo,那么它的一个数据提取模块实现通过一个专业的接口去实现,不但可以通过Ganglia的客户端去实现,也可以通过第三方的一些程序,比如通过php程序,后续都会介绍到,也会推荐几个数据提取模块的脚本。