一、Ganglia的组件

Ganglia包括如下程序,他们之间通过XML格式传递监控数据,达到监控效果。

Gmetad 这个程序负责收集各个cluster的数据,并更新到rrd数据库中。

Gmond 收集本机的监控数据,发送到其他机器上。收集其他机器的监控数据,供Gmetad读取。默认监听端口8649

web front-end 一个基于web的监控界面,需要和Gmetad安装在同一个节点上,从Gmetad取数据,并且读取rrd数据库,生成图片,显示出来。

二、Ganglia的工作模式

Ganglia的收集数据工作可以工作在单播(unicast)或多播(multicast)模式下,默认为多播模式。

单播:发送自己收集到的监控数据到特定的一台或几台机器上,可以跨网段

多播:发送自己收集到的监控数据到同一网段内所有的机器上,同时收集同一网段内的所有机器发送过来的监控数据。因为是以广播包的形式发送,因此需要同一网段内。但同一网段内,又可以定义不同的发送通道。

三、Ganglia的安装

Ganglia的安装非常简单,分为监控管理端(Gmetad)和客户端(Gmond)安装两部分,已经写成安装脚本,这里不在描述。

推荐安装版本是ganglia-3.4.0,可以在http://sourceforge.net/projects/ganglia/files/下载安装。

四、Ganglia的配置

这里介绍一个简单的Ganglia配置构架,即一个监控管理端和多个客户端,我们假定gmond工作在多播模式,并且有一个Cluster1的集群,里面有10台服务器(从host1到host10),在同一个网段内。


1、监控管理端配置

监控管理端的配置文件是gmetad.conf,在安装Ganglia的etc目录下可以找到,这个文件配置非常简单,介绍如下:

data_source "Cluster1" host1 host2

xml_port 8651

interactive_port 8652

rrd_rootdir "/var/lib/ganglia/rrds"

data_source参数定义了集群名字,以及集群中的节点。由于采用multicast模式,每台gmond节点都有本Cluster1内节点机器的所有监控数据,因此不需要把所有节点写入data_source中。建议写入不低于2个,在host1节点死机的时候,会自动找host2节点取数据。

xml_port定义了一个收集数据汇总的交互端口,如果不指定,默认是8651,可以通过telnet这个端口得到监控管理端收集到的客户端的所有数据。

interactive_port 定义了Web端获取数据的端口,这个端口在配置Ganglia的web监控界面时需要指定。

rrd_rootdir参数定义了rrd数据库的存放路径,gmetad收集到监控数据后,会更新到该目录下的对应的rrd数据库中。

上面通过data_source参数定义了一个监控集群,如果要监控多个应用系统,可以通过如下方式定义:

data_source "my cluster" 10 localhost  my.machine.edu:8649  1.2.3.5:8655

data_source "my grid" 50 1.3.4.7:8655 grid.org:8651 grid-backup.org:8651

data_source "another source" 1.3.4.7:8655  1.3.4.8

在定义集群节点的时候,可以采用主机名、IP地址等形式,也可以加端口,如果不加端口的话,默认是8649端口,同时可以设定采集数据的频率,如上面的“10 localhost、50 1.3.4.7:8655”等,分别表示每隔10秒钟、50秒钟采集一次数据。


2、客户端配置

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

globals {

     

  daemonize = yes        #以后台的方式运行

     

  setuid = yes

     

  user = nobody          #运行gmond的用户

     

  debug_level = 0        #调试级别

     

  max_udp_msg_len = 1472

     

  mute = no            #哑巴,本节点将不会再广播任何自己收集到的数据到网络上

     

  deaf = no             #聋子,本节点将不再接收任何其他节点广播的数据包

     

  allow_extra_data = yes

     

  host_dmax = 0 /*secs */

     

  cleanup_threshold = 300 /*secs */

     

  gexec = no             #是否使用gexec

     

  send_metadata_interval = 0

     

}

     

      

     

      

     

cluster {

     

  name = "Cluster1"     #本节点属于哪个cluster

     

  owner = "junfeng"     #谁是该节点的所有者

     

  latlong = "unspecified"   #在地球上的坐标,经度、纬度?

     

  url = "unspecified"

     

}

     

      

     

host {

     

  location = "unspecified"

     

 }

     

      

     

udp_send_channel {       #udp包的发送通道

     

  mcast_join = 239.2.11.71   #多播,工作在239.2.11.71通道下。如果使用单播模式,则要写host = host1,单播模式下也可以配置多个udp_send_channel

     

  port = 8649            #监听端口

     

  ttl = 1

     

}

     

      

     

udp_recv_channel {           #接收udp包配置

     

  mcast_join = 239.2.11.71   #同样工作在239.2.11.71通道下

     

  port = 8649                #监听端口

     

  bind = 239.2.11.71         #绑定

     

}

     

      

     

      

     

tcp_accept_channel {

     

  port = 8649               #通过tcp协议监听的端口,远端可以通过链接8649端口得到监控数据

     

}

3、Ganglia之Web端配置


Ganglia的web监控界面是基于PHP的,因此需要安装PHP环境,PHP环境的安装不在介绍,可以在http://sourceforge.net/projects/ganglia/files/下载ganglia-web,然后放到web根目录即可,推荐下载ganglia-web-3.5.7版本。

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

$conf['gmetad_root'] = "/var/lib/ganglia";# ganglia web根目录

$conf['rrds'] = "${conf['gmetad_root']}/rrds";#ganglia web读取rrds数据库的路径

$conf['dwoo_compiled_dir'] = "${conf['gmetad_root']}/dwoo/compiled";#需要777权限

$conf['dwoo_cache_dir'] = "${conf['gmetad_root']}/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服务器的交互式提供监控数据端口发布


五、管理ganglia


所有配置操作完成后,即可启动ganglia服务了,首先在监控管理端启动gmetad服务:

/etc/init.d/gmetad start

接着启动apache的web服务:

/usr/local/apache2/bin/apachectl start

最后在每个客户端启动gmond服务:

/etc/init.d/gmond start

最后附上一张web截图:


分布式监控系统ganglia配置文档_Linux系统