现在的位置: 首页 > Linux > CentOS > Linux > 正文

分布式监测系统ganglia使用分享

2013年05月03日 CentOS, Linux ⁄ 共 5395字 ⁄ 字号 暂无评论 ⁄ 阅读 4,400 次

本文主要介绍Ganglia部署过程、使用过程中遇到的问题和解决办法,以及实际使用的效果。

1. 工欲善其事,必先利其器!

前段时间在定位项目性能问题时,苦于难以评价系统各参数以及使用情况对性能的影响,调研了一下集群监测系统,发现了一个监测集群系统运行状态的利器:ganglia。

Ganglia是UC Berkeley发起的一个开源集群监视项目,其核心包含gmond、gmetad以及一个Web前端,主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。

不仅如此,Ganglia使用者可以在其上二次开发以监控需要的数据,比如组件的请求数、负载、占用的内存CPU、以及运行状态等,并非常直观的显示在Web页面上

2. Ganglia的工作原理

每台计算机都运行一个收集和发送度量数据的名为gmond的守护进程。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得Ganglia可以实现良好的扩展。gmond带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。所有这些数据多次收集会影响节点性能。网络中的"抖动"发生在大量小消息同时出现时,可以通过将节点时钟保持一致,来避免这个问题。

2.1 安装步骤

依赖

Ganglia依赖 zlib freetype libart_lgpl libpng

安装rrdtool

 tar -xvzf rrdtool-1.4.7.tar.gz
 cd rrdtool-1.4.7
 ./configure --prefix=/usr/local/rrdtool
 make
 make install

执行下命令,看是否安装成功

 /usr/local/rrdtool/bin/rrdtool

出现如下结果,则表示成功

 RRDtool 1.4.7 Copyright 1997-2012 by Tobias Oetiker <[email protected]>
  Compiled Jan 8 2013 11:44:13

如果在configure步骤出现如下错误

 configure: WARNING:
 ---------------------------------------------------------------------------
 I could not find a working copy of libxml-2.0. Check config.log for hints on why
  this is the case. Maybe you need to set LDFLAGS and CPPFLAGS appropriately
  so that compiler and the linker can find libxml2 and its header files. If
  you have not installed libxml-2.0, you can get it either from its original home on

http://xmlsoft.org/downloads.html

 You can find also find an archive copy on

http://oss.oetiker.ch/rrdtool/pub/libs

 The last tested version of libxml-2.0 is 2.7.8.
 LIBS=-lm
  LDFLAGS=
  CPPFLAGS= -I/usr/include/libxml2
----------------------------------------------------------------------------
configure: error: Please fix the library issues listed above and try again.
 

则说明机器上缺少一些库,需要安装,比如yum -y install libxm2。 如果在时出现如下错误

EGIN failed--compilation aborted at Makefile.PL line 1.

则执行yum install perl-ExtUtils-MakeMaker 命令安装 perl-ExtUtils-MakeMaker。 安装expat

 tar -xvzf expat-2.1.0.tar.gz
 ./configure --prefix=/usr/local/expat
 make
 make install

对于64位操作系统,需要手动的拷贝下动态链接库到lib64下

 mkdir /usr/local/expat/lib64
 cp -a /usr/local/expat/lib/* /usr/local/expat/lib64/

安装apr及apr-util

 tar -xvzf apr-1.4.6.tar.gz
 ./configure --prefix=/usr/local/apr
 make
 make install
 tar -xvzf apr-util-1.4.1.tar.gz
 ./configure --with-apr=/usr/local/apr --with-expat=/usr/local/expat
 make
 make install

同样64位机器需要拷贝动态链接库

 /bin/cp -f /usr/local/apr/include/apr-1/* /usr/local/apr/include/
 mkdir -p /usr/local/apr/lib64
 /bin/cp -a -f /usr/local/apr/lib/* /usr/local/apr/lib64/

安装confuse

 tar -xvzf confuse-2.7.tar.gz
 ./configure CFLAGS=-fPIC --disable-nls --prefix=/usr/local/confuse
 make
 make install

拷贝动态链接库

 mkdir -p /usr/local/confuse/lib64
 /bin/cp -a -f /usr/local/confuse/lib/* /usr/local/confuse/lib64/

安装ganglia 现在才是安装ganglia的开始,如果提示需要pcre的话,安装下 yum install pcre 下载ganglia-3.2.0,解压,安装

 Tar –xvzf ganglia-3.4.0.tar.gz
 ./configure --prefix=/usr/local/ganglia --with-librrd=/usr/local/rrdtool --with-libapr=/usr/local/apr --with-libexpat=/usr/local/expat --with-libconfuse=/usr/local/confuse --with-gmetad --enable-gexec --enable-status --sysconfdir=/etc/ganglia
 make
 make install

ganglia服务端 创建rrdtool数据目录,看$ganglia-3.2.0/web/conf.php里面的gmetad_root变量,并根据apache的运行用户创建权限

 mkdir -p /var/lib/ganglia/rrds
 mkdir -p /var/lib/ganglia/dwoo
 chown -R nobody:nobody /var/lib/ganglia

配置一个数据源,修改/etc/ganglia/gmetad.conf文件,同时将运行用户设置为rrdtool的目录权限用户,例如apache用户

 data_source "suc" localhost
 setuid_username "apache"

其中suc是数据源的名称,客户端分组会依赖此名称,后面会提到。 添加自启动脚本

 /bin/cp -f gmetad/gmetad.init /etc/init.d/gmetad
 /bin/cp -f /usr/local/ganglia/sbin/gmetad /usr/sbin/gmetad
 chkconfig -add gmetad

启动gmetad服务

 service gmetad start

看见Starting GANGLIA gmetad: [ OK ]就代表运行正常了。 客户端配置 本机安装如下:

 /bin/cp -f gmond/gmond.init /etc/init.d/gmond
 /bin/cp -f /usr/local/ganglia/sbin/gmond/usr/sbin/gmond
 chkconfig -add gmond
 gmond --default_config > /etc/ganglia/gmond.conf

对于生成的默认配置文件需要做适当的修改

 cluster {
 name="suc"
 owner="apache"
 latlong="unspecified"
 url="unspecified"
 }

其中name是将要在服务端进行的分组,是服务端的数据源。接下来开启服务

 service gmond start

看见Starting GANGLIA gmetad: [ OK ]代表启动成功。如果有失败,可以讲gmond.conf中的debug有0改为100,看更多的日志,然后进行排查。

 globals {
 daemonize = yes
 setuid = yes
 user = nobody
 debug_level = 100
 }

非本机客户端配置需要安装服务端安装一样进行配置,运行,非常麻烦,这里使用本机安装好的文件进行安装。使用下面的脚本进行安装deploy-ganglia.sh

 i=$1
 scp /usr/sbin/gmond $i:/usr/sbin/gmond
 ssh $i mkdir -p /etc/ganglia/
 ssh $i mkdir -p /usr/local/ganglia/lib64
 ssh $i mkdir -p /usr/local/expat/lib
 scp /etc/ganglia/gmond.conf $i:/etc/ganglia/
 scp /etc/init.d/gmond $i:/etc/init.d/
 scp -r /usr/local/ganglia/lib64/* $i:/usr/local/ganglia/lib64/
 scp /usr/local/expat/lib/libexpat.so.1 $i:/usr/local/expat/lib/libexpat.so.1
 scp /usr/lib64/libapr-1.so.0 $i:/usr/lib64/

实际上就是将本机安装好(编译好)的动态链接库拷贝到其它机器上,使用如下命令拷贝即可

 sh deploy-ganglia.sh 10.1.11.2

服务端WEB设置 PHP程序需要依赖Apache来运行,因此需要安装如下依赖

 yum install php-common php-cli php php-gd httpd

安装web程序,这里假定apache的root路径在/var/www/html下面,具体路径可查看/usr/local/apache/conf/httpd.conf文件中的DocumentRoot配置。

 mkdir /var/www/html/ganglia
 cp -a -f ganglia-3.2.0/web/* /var/www/html/ganglia

禁用SELinux setenforce 0 修改rrdtool的路径,文件/var/www/html/ganglia/conf.php中的RRDTOOL,如果不对此配置进行修改,则可能导致访问ganglia时,页面没有图片出现。

 define("RRDTOOL", "/usr/local/rrdtool/bin/rrdtool");

重启httpd服务器即可看到效果 service httpd restart

3.实际使用效果

在项目中主要监控了系统的负载、内存CPU和带宽等四个维度,效果图如下:

3.1 负载

Ganglia记录每一时刻的负载情况,并根据负载轻重显示不同的颜色,红色表示负载过重。

3.2 内存

Ganglia自带了整机器的内存使用情况,其中包括:总内存、物理使用内存、共享内存、交换内存等,使用者可以二次开发监控某一进程的内存使用状态。

3.3 CPU

3.4 带宽

4. 总结

Ganglia是监测集群系统运行状态的利器,能够清晰直观地显示出各个资源的运行状况,如果有必要,可应用于某个项目的实际开发中。