一、Cacti/Nagios/Zabbix/centreon/Ganglia之抉择

1cacti

Cacti是一套基于PHP,MySQL,SNMPRRDTool开发的网络流量监测图形分析工具。

简单的说Cacti 就是一个PHP 程序。它通过使用SNMP 协议获取远端网络设备和相关信息,(其实就是使用Net-SNMP 软件包的snmpget snmpwalk 命令获取)并通过RRDTOOL 工具绘图,通过PHP 程序展现出来。我们使用它可以展现出监控对象一段时间内的状态或者性能趋势图。

2nagios

Nagios是一款开源的免费网络监视工具,能有效监控WindowsLinuxUnix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

3zabbix

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。

zabbix2部分构成,zabbixserver与可选组件zabbix agentzabbix server可以通过SNMPzabbix agentping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台上。

4ganglia

Ganglia是一款为HPC(高性能计算)集群而设计的可扩展的分布式监控系统,它可以监视和显示集群中的节点的各种状态信息,它由运行在各个节点上的gmond守护进程来采集CPU 、内存、硬盘利用率、I/O负载、网络流量情况等方面的数据,然后汇总到gmetad守护进程下,使用rrdtool存储数据,最后将历史数据以曲线方式通过PHP页面呈现。

Ganglia监控系统有三部分组成,分别是gmondgmetadwebfrontend

5centreon

Centreon是一款功能强大的分布式IT监控系统,它通过第三方组件可以实现对网络、操作系统和应用程序的监控:首先,它是开源的,我们可以免费使用它;其次,它的底层采用nagios作为监控软件,同时nagios通过ndoutil模块将监控到的数据定时写入数据库中,而Centreon实时从数据库读取该数据并通过Web界面展现监控数据;,最后,我们可以通过Centreon管理和配置nagios,或者说Centreon就是nagios的一个管理配置工具,通过Centreon提供的Web配置界面,可以轻松完成nagios的各种繁琐配置。

6、对比图                         wKioL1cE11fQj5mwAAJzvqsn6jk700.jpg

 

二、   统一运维监控平台设计思路

构建一个智能的运维监控平台,必须以运行监控和故障报警这两个方面为重点,将所有业务系统中所涉及的网络资源、硬件资源、软件资源、数据库资源等纳入统一的运维监控平台中,并通过消除管理软件的差别,数据采集手段的差别,对各种不同的数据来源实现统一管理、统一规范、统一处理、统一展现、统一用户登录、统一权限控制,最终实现运维规范化、自动化、智能化的大运维管理。

智能的运维监控平台,设计架构从低到高可以分为6层,三大模块,如下图:

wKioL1cE17mzjL46AAByOXMa-Vw832.jpg

运维监控平台实现拓扑图,请看下图:

wKiom1cE1yGwsUgWAABXwDX2EtM258.jpg

三、Ganglia的安装

1ganglia的常用架构

Ganglia监控系统有三部分组成,分别是gmondgmetadwebfrontend,如下图所示:

wKioL1cE1-HTVPzlAABOAgMoYdU446.jpg


同时,Ganglia支持多种监控架构,这是由gmetad的特性决定的,gmetad可以周期性地去多个gmond节点收集数据,这就是ganglia的两层架构。同时,gmetad不但可以从gmond收集数据,也可以从其他的gmetad得到数据,这就形成了Gnaglia的三层架构。多种架构方式也体现了Ganglia作为分布式监控系统的灵活性和扩展性。

 wKiom1cE15nx74suAABQDidwbGs078.jpg

2yum方式安装ganglia

CentOS系统中默认的yum源并没有包含Ganglia,所以我们必须安装扩展的yum源。从下面这个地址下载Linux附加软件包(EPEL),然后安装扩展yum源:

[root@node1 ~]#wgethttp://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
[root@node1 ~]# rpm -ivhepel-release-5-4.noarch.rpm
完成yum源安装,就可以直接通过yum方式安装Ganglia了。
Ganglia的安装分为两个部分,分别是gmetad和gmond,gmetad安装在监控管理端,gmond安装在需要监控的客户端主机,对应的yum包名称分别为ganglia-gmetad和ganglia-gmond。
下面介绍通过yum方式安装Ganglia的过程。
以下操作是在监控管理端进行的,首先通过yum命令查看下可用的Ganglia安装信息:
[root@monitor ~]#yum list ganglia*
安装gmetad需要rrdtool的支持,而通过yum方式,会自动查找gmetad依赖的安装包,自动完成安装,这也是yum方式安装的优势。
最后在需要监控的所有客户端主机上安装gmond服务:
[root@node1 ~]# yum -y install  ganglia-gmond.x86_64
这样,Ganglia监控系统就安装完成了。通过yum方式安装的Ganglia默认配置文件位于/etc/ganglia中。


 

3Ganglia监控管理端配置

监控管理端的配置文件是gmetad.conf,这个配置文件内容比较多,但是需要修改的配置仅有如下几个:

data_source "Cluster1" cloud0cloud2
gridname "IIVEYGrid"
xml_port 8651
interactive_port 8652
rrd_rootdir"/var/lib/ganglia/rrds"
     data_source:此参数定义了集群名字,以及集群中的节点。Cluster1就是这个集群的名称,cloud0和cloud2指明了从这两个节点收集数据,Cluster1后面指定的节点名可以是IP地址,也可以是主机名,由于采用了multicast模式,每个gmond节点都有本Cluster1集群节点所有监控数据,因此不需要把所有节点都写入data_source中。但是建议写入不低于2个,这样,在cloud0节点出现故障的时候,gmetad会自动到cloud2节点采集数据,这样就保证了Ganglia监控系统的高可用性。
上面通过data_source参数定义了一个服务器集群Cluster1,对于要监控多个应用系统的情况,还可以对不同用途的主机进行分组,定义多个服务器集群,分组方式可以通过下面的方法定义:
data_source "my cluster" 10localhost  my.machine.edu:8649  1.2.3.5:8655
data_source "my grid" 501.3.4.7:8655 grid.org:8651 grid-backup.org:8651
data_source "another source"1.3.4.7:8655  1.3.4.8
可以通过定义多个data_source来实现监控多个服务器集群,而每个服务器集群在定义集群节点的时候,可以采用主机名或IP地址等形式,也可以加端口,如果不加端口,默认端口是8649,同时可以设定采集数据的频率,如上面的“10 localhost、50 1.3.4.7:8655”等,分别表示每隔10秒钟、50秒钟采集一次数据。
     gridname:此参数是定义一个网格名称。一个网格有多个服务器集群组成,每个服务器集群由“data_source”选项来定义。
     xml_port:此参数定义了一个收集数据汇总的交互端口,如果不指定,默认是8651,可以通过telnet这个端口得到监控管理端收集到的客户端的所有数据。
     interactive_port:此参数定义了Web端获取数据的端口,这个端口在配置Ganglia的Web监控界面时需要指定。
     rrd_rootdir:此参数定义了rrd数据库的存放路径,gmetad在收集到监控数据后会将其更新到该目录下的对应的rrd数据库中。


4Ganglia的客户端配置

Ganglia监控客户端gmond安装完成后,配置文件位于Ganglia安装路径的etc目录下,名称为gmond.conf,这个配置文件稍微复杂,如下所示:

globals {
daemonize = yes  #是否后台运行,这里表示以后台的方式运行
setuid = yes               #是否设置运行用户,在Windows中需要设置为false
 user = nobody    #设置运行的用户名称,必须是操作系统已经存在的用户,默认是nobody
debug_level = 0   #调试级别,默认是0,表示不输出任何日志,数字越大表示输出的日志越多
max_udp_msg_len = 1472
 mute = no     #是否发送监控数据到其他节点,设置为no表示本节点将不再广播任何自己收集到的数据到网络上
 deaf = no     #是否接受其他节点发送过来的监控数据,设置为no表示本节点将不再接收任何其他节点广播的数据包
allow_extra_data = yes#是否发送扩展数据
host_dmax = 0 /*secs */#是否删除一个节点,0代表永远不删除,0之外的整数代表节点的不响应时间,超过这个时间后,Ganglia就会刷新集群节点信息进而删除此节点
cleanup_threshold = 300 /*secs */  #gmond清理过期数据的时间
gexec = no             #是否使用gexec来告知主机是否可用,这里不启用
send_metadata_interval = 0#在单播协议中,新添加的节点在多长时间内响应一下以表示自己的存在,0代表仅在gmond启动时通知一次,单位秒
}
cluster {
name = "Cluster1"     #集群的名称,是区分此节点属于某个集群的标志,必须和监控服务端data_source中的某一项名称匹配
owner = "junfeng"     #节点的拥有者,也就是节点的管理员
latlong = "unspecified"   #节点的坐标,经度、纬度等,一般无需指定
url = "unspecified"            #节点的URL地址,一般无需指定
}
 
host {
 location = "unspecified" #节点的物理位置,一般无需指定
 }
udp_send_channel {         #udp包的发送通道
mcast_join = 239.2.11.71   #指定发送的多播地址,其中239.2.11.71是一个D类地址。如果使用单播模式,则要写host = host1,在单播模式下也可以配置多个udp_send_channel
 port = 8649            #监听端口
ttl = 1
}
udp_recv_channel {           #接收udp包配置
mcast_join = 239.2.11.71   #指定接收的多播地址,同样也是239.2.11.71这个D类地址
 port = 8649                #监听端口
 bind = 239.2.11.71         #绑定地址
}
tcp_accept_channel {
 port = 8649               #通过tcp协议监听的端口,在远端可以通过连接到8649端口得到监控数据
}
         在一个集群内,所有客户端的配置是一样的。完成一个客户端配置后,将配置文件复制到此集群内的所有客户端主机上即可完成客户端主机的配置。


5Ganglia web端配置

Gangliaweb监控界面是基于PHP的,因此需要安装PHP环境。

有两种方式安装Gangliaweb监控界面,一种是yum直接安装,另一种是通过源码安装。PHP环境的安装这里不做介绍,大家可以在http://sourceforge.net/projects/ganglia/files/下载ganglia-web的最新版本,然后将ganglia-web程序放到Apche Web的根目录即可,这里我们下载的版本是ganglia-web-3.7.1

         配置GangliaWeb界面比较简单,只需要修改几个php文件即可。首先是conf_default.php,可以将conf_default.php重命名为conf.php,也可以保持不变,GangliaWeb默认先找conf.php,找不到会继续找conf_default.php,需要修改的内容如下:

$conf['gweb_confdir'] = "/var/www/html/ganglia";  #ganglia web的根目录
$conf['gmetad_root'] = "/opt/app/ganglia";         # ganglia程序安装目录
$conf['rrds'] = "${conf['gmetad_root']}/rrds";               #gangliaweb读取rrd数据库的路径,这里是/opt/app/ganglia/rrds
$conf['dwoo_compiled_dir'] ="${conf['gweb_confdir']}/dwoo/compiled";    #需要“777”权限
$conf['dwoo_cache_dir'] ="${conf['gweb_confdir']}/dwoo/cache";       #需要“777”权限
$conf['rrdtool'] ="/opt/rrdtool/bin/rrdtool";  #指定rrdtool的路径
$conf['graphdir']= $conf['gweb_root'] .'/graph.d';          #生成图形模板目录
$conf['ganglia_ip'] ="127.0.0.1";             #gmetad服务所在服务器的地址
$conf['ganglia_port'] = 8652;           #gmetad服务器的交互式提供监控数据端口发布
         这里需要说明的是:“$conf['dwoo_compiled_dir']”和“$conf['dwoo_cache_dir']”指定的路径在默认情况下可能不存在,因此需要手动建立compiled和cache目录,并授予Linux下“777”的权限。另外,rrd数据库的存储目录/opt/app/ganglia/rrds一定要保证rrdtool可写,因此需要执行授权命令:
         Chown–R nobody:nobody /opt/app/ganglia/rrds
         这样rrdtool才能正常读取rrd数据库,进而将数据通过Web界面展示出来。其实ganglia-web的配置还是比较简单的,一旦配置出错会给出提示,根据错误提示进行问题排查,一般都能找到解决方法。


四、扩展Ganglia监控功能

1、通过gmetric接口扩展Ganglia监控

gmetricGanglia的一个命令行工具它可以将数据直接发送到负责收集数据的gmond节点,或者广播给所有gmond节点。

Ganglia安装完成后,会在bin目录下生成gmetric命令。下面通过一个实例介绍一下gmetric的使用方法:

[root@cloud1 ~]#/opt/app/ganglia/bin/gmetric\
>-n disk_used -v 40 -t int32 -u '% test'-d 50 -S '8.8.8.8:cloud1'
其中:
     -n,表示要监控的指标名。
     -v,表示写入的监控指标值。
     -t,表示写入监控数据的类型。
     -u,表示监控数据的单位。
     -d,表示监控指标的存活时间。
     -c,用于指定ganglia配置文件的位置。
     -S,表示伪装客户端信息,8.8.8.8代表伪装的客户端地址,cloud1代表被监控主机的主机名。


 

2python扩展插件

现成可用扩展插件:

https://github.com/ganglia/gmond_python_modules

 

五、Ganglia的优势与注意事项

 

1、  可以轻松监控上万台服务器,数据延时在10s以内。

2、  分布式架构,扩展方面,非常适合多地跨机房部署。

3、  centrenon无缝整合,实现监控、报警一体化。

4、数据存储磁盘IO可能成为瓶颈,需要高性能磁盘做支撑。