开源监控软件ganglia安装手册

Ganglia是加州伯克利大学千禧计划的其中一个开源项目,以BSD协议分发。是一个集群汇总监控用的的软件,和很多人熟知的Cacti不 同,cacti是详细监控集群中每台服务器的运行状态,而Ganglia是将集群中的服务器数据进行汇总然后监控。有时通过cacti或者zabbix看 不出来的集群总体负载问题,却能够在Ganglia中体现,其集群的熵图我个人认为是个挺亮点的东西,一眼就明确集群的负载状况。中文翻译叫神经中枢,一 目了然,言简意赅。
ganglia 分为服务器端和客户端,编译后文件名是gmetad和gmond,其中gmetad是服务器端,gmond是客户端,服务器端只有一个,而被监控服务器均 安装客户端。很有意思的是,Ganglia采用Internet IPv4 类D地址中的的组播进行数据请求。我猜可能主要是为了实现一对多节省带宽的需要。其实现原理应该是gmetad发送一个请求到一个组播地址,由于是组播地 址,所以gmetad只需发送一次请求包即可完成对所有gmond的轮询。(如果是单播,则Ganglia需要向每台服务器均发送一次轮询请求,这样的 话,集群数量多了,主服务器光发送就会占用不小的带宽。而Ganglia本身是为大规模集群所做的HPC而生的,如果占用很高的带宽和占用很大量的CPU 资源去处理网络数据就不符合其设计理念了。)然后gmond通过这个请求将采集到的数据返回给gmetad,gmetad将数据保存在rrd数据库中,然 后通过web界面绘图展示。

开源监控软件ganglia安装手册_第1张图片

Ganglia的扩展插件非常好写,无论用何种语言(shell,php,pyton)都可以写,只要把最终结果传给gmetric就可以,这样在web上就可以看到对应的数据。

0.           准备

最新的ganglia版本为3.2.0,但是我推荐安装ganglia3.0.3,因为这个版本安装比较简单,依赖包只有rrdtool。而新版本依赖包太多。

官方网站:http://ganglia.info

ganglia的下载地址 http://sourceforge.net/projects/ganglia

windowswindows客户端版和ganglia 源包:

:http://www.sajinet.com.pe/ganglia/

 

http://sourceforge.net/project/showfiles.php?group_id=43021&package_id=35280
ganglia
的安装分为服务端和客户端和web端安装

文档帮助: http://ganglia.sourceforge.net/docs/

1)     服务端依赖包

Ganglia里的gmetad

Rrdtool(这个依赖很多包,ganglia对于rrdtool的版本不敏感,最好选择比较好安装的版本安装)

2)     客户端
ganglia
里的gmond

3)     Web端:

Apache,php,rrdtool,php-gd(可不用装,不装的话只是看不到一张饼图,不影响使用)

 1.服务端安装 gmetad)

   服务端的服务为gmetad,安装前需要先安装RRDTool(数据库和绘图工具,服务端收集的客户端信息由其来保存),因为要绘制曲线图,所以安装RRDTool前,还必须安装好libpng,freetype,zlib这些库(也是phpgd库需要的),下载地址http://www.rrdtool.org/ 

安装完了RRDTool,就可以安装gmetad

 

点击(此处)折叠或打开

  1. tar –zxvf ganglia3.0.3.tar.gz
  2. cd ganglia3.0.3
  3. ./configure --with-gmetad --sysconfdir=/etc/ganglia --with-librrd=/usr/local/rrdtool --prefix=/usr/local/ganglia
  4. make
  5. make install

gmetad.init文件拷贝到 /etc/init.d/:

 

点击(此处)折叠或打开

  1. cd ganglia-3.0.3/gmetad
  2. cp gmetad.init /etc/init.d/gmetad #若是ganglia安装在别的目录,则修改gmetad.init里的gmetad路径
  3. chkconfig --add gmetad
  4. chkconfig gmetad on
  5. chkconfig --list gmetad
  6. GMETAD 0:off 1:off 2:on 3:on 4:on 5:on 6:off

创建rrd数据存储的文件夹修改属性拥有者为: "nobody"

 

点击(此处)折叠或打开

  1. mkdir /var/lib/ganglia/rrds
  2. chown nobody:nobody /var/lib/ganglia/rrds

启动gmetad:

 

点击(此处)折叠或打开

  1. service gmetad start
  2. Starting GANGLIA gmetad: [ OK ]

修改 /etc/gmetad.conf文件:

 

点击(此处)折叠或打开

  1. data_source "taskcenter" 1.2.3.4 #所要监控的客户端 可以写多个
  2. setuid_username "root" #可改为其他安全用户
  3. # default: "/data/ganglia/rrds" #定义该客户端的数据保存的路径
  4. # rrd_rootdir "/some/other/place"
  5. rrd_rootdir "/data/ganglia/rrds"

重新启动gmetad:

 

点击(此处)折叠或打开

  1. service gmetad start
  2. Starting GANGLIA gmetad: [ OK ]

验证gmetad正常工作:

 

点击(此处)折叠或打开

  1. telnet localhost 8651

就可以得到监控的各个主机的状态。

 

2.安装客户端gmond2.1 linux

 在每台需要监控的机器上,安装gmond

安装ganglia:

 

点击(此处)折叠或打开

  1. tar zxvf ganglia-3.0.3.tar.gz
  2. cd ganglia-3.0.3
  3.  ./configure --prefix=/usr/local/ganglia  --sysconfdir=/etc/ganglia  --enable-gexec
  4. make;
  5. make install
  6. cd gmond
  7. mkdir /etc/ganglia
  8. ./gmond –t | tee  /etc/ganglia/gmond.conf

 

点击(此处)折叠或打开

  1. vi gmond.init
  2. 修改里面的GMOND 改为GMOND=/usr/local/ganglia/sbin/gmond
  3. # cp gmond.init /etc/init.d/gmond
  4. # chkconfig --add gmond
  5. # chkconfig --list gmond
  6. # chkconfig  gmond on
  7. gmond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  8. # service gmond start
  9. Starting GANGLIA gmond: [ OK ] #若不成功的话,就用/usr/local/ganglia/sbin/gmond手动启动

启动失败有可能是因为多播地址没有路由

 

点击(此处)折叠或打开

  1. route add -host 239.2.11.71 dev eth0

验证gmond正常工作:

 

点击(此处)折叠或打开

  1. telnet localhost 8649

就可以获取机群内运行gmond的主机的信息

vi /etc/ganglia/gmond.conf
配置gmond.conf:

 

点击(此处)折叠或打开

  1. /etc/gmond.conf:
  2. globals
  3. {
  4. setuid = no
  5. user = nobody
  6. cleanup_threshold = 300 /*secs */
  7. }
  8. #修改监控组名称
  9. cluster
  10. {
  11. name = "taskcenter"
  12. .......}

 

配置完成后重新启动gmond

 

3.web端安装

web端用于通过web来查看监控状态。
因为web端程序是php写的,所以需要安装apache。同时需要编译phpgd库。web端需要和服务器端在一块。

 #yum install httpd

#yum install python

# cp -a ganglia-3.0.3/web /var/www/html/ganglia

确定web server支持PHP4

apache来说,php模块mod_php的状态应该是enabled,貌似默认就是的^_^

配制文件是/var/www/html/ganglia/conf.php

 

点击(此处)折叠或打开

  1. # Where gmetad stores the rrd archives.
  2. $gmetad_root = "/data/ganglia";
  3. $rrds = "$gmetad_root/rrds"; #数据源路径
  4. # Leave this alone if rrdtool is installed in $gmetad_root,
  5. # otherwise, change it if it is installed elsewhere (like /usr/bin)
  6. define("RRDTOOL", "/usr/local/rrdtool-1.0.50/bin/rrdtool"); # rrdtool执行路径
  7. #
  8. # If you want to grab data from a different ganglia source specify it here.
  9. # Although, it would be strange to alter the IP since the Round-Robin
  10. # databases need to be local to be read.
  11. #
  12. $ganglia_ip = "localhost";
  13. $ganglia_port = 8652;
  14. #$ganglia_port = 8649;

 

在浏览器地址栏输入http://localhost/ganglia/应该可以看到有页面显示了。

开源监控软件ganglia安装手册_第2张图片

 

访问web出现图片画不出来的原因:

1)     rrdtool没有安装,或者conf.php里没有配置

2)     gemtad没有启动

3)     没有客户端数据

4)     Selinux限制apache执行rrdtool

 

4、集群的分组部署。
 
网上Ganglia讲安装配置的文章很多,但是讲分组配置的很少。 其实这个很重要,默认配置下,Ganglia会把所有东西放在一个Grid里面,也就是一个网格。大的集群,不分组。但是真实的服务器集群有各种功能,每 个群分管不同的事务,全放一起就太乱了。也不好识别,所以需要分组使用。
 
其实Ganglia的分组很简单,就是分端口,不同的组配置不同的监听端口就完事了。
我的 /etc/ganglia/gmetad.conf 是这样配置的。
gmetad
data_source "Namenode" 192.168.1.28:8653
data_source "Datanode" 192.168.1.27:8649
data_source "
Portal" 192.168.1.43:8650

data_source "Collector" 192.168.1.35:8651
data_source "DB" 192.168.1.51:8652

gridname "Hadoop"
rrd_rootdir "/data/ganglia/rrds"
#配置rrd数据保存文件的路径,给web界面用的,这个是固定的,最好放在web文件夹下,并赋予正确的权限
case_sensitive_hostnames 0
数 据来源有5个,这5个分别是每个组的组长,相当于一道杠。但是组长是不需要配置gmetad的,除非你要做多级组播收集数据。每个组长只需要分配不同的端 口号就可以了。你可能会问,IP不一样,端口一样不行吗?不行,因为这个IP是单播IP,相当于一个路由指向,而Ganglia实际的数据传输是在多播 IP上进行的,而多播IP只有一个。在客户端配置,如果你需要多级gmetad,可以配多个多播IP。
 
客户端配置就比较复杂一些了。我只贴上需要修改的部分,其他都是默认就可以了
gmond
cluster {
    name = "
Portal"
    #对应gmetad中的Portal,名称一定要写对。
    owner = "unspecified"
    latlong = "unspecified"
    url = "unspecified"
}
/* Feel free to specify as many udp_send_channels as you like.    Gmond
     used to only support having a single channel */
udp_send_channel {
    #bind_hostname = yes # Highly recommended, soon to be default.
                                             # This option tells gmond to use a source address
                                             # that resolves to the machine's hostname.    Without
                                             # this, the metrics may appear to come from any
                                             # interface and the DNS names associated with
                                             # those IPs will be used to create the RRDs.
    mcast_join = 239.2.11.71
    port =
8650
#gmetad中的Portal所分配的端口号。

    ttl = 1
}

/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
    mcast_join = 239.2.11.71
    port = 8650
    bind = 239.2.11.71
}

/* You can specify as many tcp_accept_channels as you like to share
     an xml description of the state of the cluster */
tcp_accept_channel {
    port = 8650
}
红色部分就是Portal小组的端口,从gmetad.conf中可以看到,Portal小组属于8650端口,那么相应的在gmond中,也要将udp和tcp端口写为8650。
 
如果是另外一个组的,就写上在gmetad中配置的那个端口。当然,你可以把这个端口号想像为小组的代号。可能更好理解一些。
 
再加上另外一个组的成员gmond就更容易理解了
cluster {
    name = "
DB"

    owner = "unspecified"
    latlong = "unspecified"
    url = "unspecified"
}

/* The host section describes attributes of the host, like the location */
host {
    location = "unspecified"
}

/* Feel free to specify as many udp_send_channels as you like.    Gmond
     used to only support having a single channel */
udp_send_channel {
    #bind_hostname = yes # Highly recommended, soon to be default.
                                             # This option tells gmond to use a source address
                                             # that resolves to the machine's hostname.    Without
                                             # this, the metrics may appear to come from any
                                             # interface and the DNS names associated with
                                             # those IPs will be used to create the RRDs.
    mcast_join = 239.2.11.71
    port = 8652
    ttl = 1
}

/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
    mcast_join = 239.2.11.71
    port = 8652
    bind = 239.2.11.71
}

/* You can specify as many tcp_accept_channels as you like to share
     an xml description of the state of the cluster */
tcp_accept_channel {
    port = 8652
}
红色对红色,蓝色对蓝色。一目了然。
 
 
Apache密码验证

通过web方式访问ganglia不需要密码,所以我们通过apache设置密码达到安全目的。


htpasswd -c /etc/httpd/conf.d/passwords {your_name}



vi /etc/httpd/conf/httpd.conf
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

修改为:

<Directory />
    Options None
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Ganglia Access"
   AuthType Basic
   AuthUserFile /etc/httpd/conf.d/passwords
   Require valid-user
</Directory>
 
添加账户:
#htpasswd -b /etc/httpd/conf.d/passwords ganglia ganglia

你可能感兴趣的:(ganglia)