Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。Ganglia集群主要用来监控系统性能,它由RRDTool工具处理数据,并生成相应的监控相关的图形,并提供一个Web控制台来直观地提供给客户端,管理员可以通过丰富的图形来对整个被监控的物理机器集群节点进行评估。Ganglia能够监控的内容很多,如CPU利用率 、Mem利用率、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。需要知道的是,Ganglia可以做系统监控,但是,目前它不支持服务器异常或故障报警功能。
Ganglia监控集群架构
下面,我们参考《Monitoring with Ganglia》一书,对Ganglia的架构有一个基本了解,然后在配置使用过程中,能够更好地理解监控的基本原理。下面是Ganglia的整体架构,如图所示:
通过上图我们可以看到,Ganglia集群主要是由gmond、gmetad、gweb这3个守护进程组成,其中gmetad进程相当于监控集群的Master,而多个gmond进程可以进行分组,每个分组其实是一个用来收集监控数据的代理服务集群,也就是说,多个gmond集群在整个Ganglia监控集群中作为从节点的角色。
下面,详细说明这个3个守护进程:
gmond相当于一个代理(agent)服务进程,它被部署在待监控的各个节点上,主要负责与宿主节点操作系统交互,获取到节点的一些监控数据,如CPU负载、磁盘容量、内存容量、网络状况等等。gmond进程收集到很多监控的元数据信息后,等待gmetad周期性地轮询这些信息。gmond进程运行时给系统带来的负载是非常小的,从而不会影响用户应用程序性能。
从《Monitoring with Ganglia》一书中引用一个给出的gmond架构图,如图所示:
这是2个gmond集群,每个集群有一个是主节点,其余的是从节点,主节点上的gmond服务与该gmond集群中其它从节点通信收集监控数据,gmond集群中的主节点通过组播的方式与gmetad服务器通信。
gmetad可以看成是Ganglia集群的Master,它采用poll的方式,主动与集群中各个gmond进程交互,周期性地轮询每个gmond进程收集到的元数据,然后存储到RRD数据库中,为Web展示监控数据做准备。
gweb进程主要是用来展示展示gmetad进程从各个节点上轮询到的监控元数据,这里,用来展示的数据,实际上是经过RRDTool这个工具处理过的。
下面,是我在CentOS-5.9系统下的安装配置实践,系统为64位。
Ganglia服务器安装配置
安装Ganglia服务器,需要用到的软件包,如下所示:
- pcre-8.33.tar.bz2
- confuse-2.7.tar.gz
- rrdtool-1.4.7.tar.gz
- php-5.5.14.tar.gz
- ganglia-3.6.0.tar.gz
- ganglia-web-3.5.9.tar.gz
- nginx-1.6.0.tar.gz
下面介绍安装和配置的过程:
首先保证yum源可用,可以查看或者修改,在目录下面/etc/yum.repo.d/可以添加或者修改。接着,就可以执行如下命令安装一些基础依赖软件包:
1 | yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpm-build glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel python-devel libXrender-devel pkgconfig |
如果安装过程中,没有出错,则可以正常进行下一步,如果出现错误,可能会影响后面的安装过程。
1 | tar jxvf pcre-8.33. tar .bz2 |
3 | ./configure --prefix=/usr --libdir=/usr/lib64 |
1 | tar zxvf confuse-2.7. tar .gz |
3 | ./configure CFLAGS=-fPIC --disable-nls |
1 | tar xvzf rrdtool-1.4.7. tar .gz |
7 | ln -s /opt/rrdtool-1.4.7/lib/librrd.so.4 /usr/lib64/librrd.so.4 |
8 | ln -s /opt/rrdtool-1.4.7/lib/librrd.so.4 /usr/lib64/librrd.so |
rrdtool默认会安装到/opt/rrdtool-1.4.7目录下面。
1 | tar xvzf php-5.5.14. tar .gz |
3 | ./configure -- enable -fpm |
7 | cp php-fpm.conf.default php-fpm.conf |
修改配置文件/usr/local/etc/php-fpm.conf,在php-fpm.conf中找到如下行:
1 | ;security.limit_extensions = .php .php3 .php4 .php5 |
将配置行修改为如下内容:
1 | security.limit_extensions = .php .php3 .php4 .php5 .htm .html .png .jpeg .gif .jpg .js .css |
因为Ganglia Web监控是PHP实现的,我们需要保证对于一些图片或者脚本都能够正常加载,才能够浏览到直观完整的图形界面,便于监控理解。
启动fpm,执行如下命令:
1 | /usr/ local /sbin/php-fpm |
验证php-fpm启动成功,可以执行如下命令:
如果能够看到类似如下的几个进程表示启动成功:
1 | root 9440 1 0 13:57 ? 00:00:00 php-fpm: master process (/usr/local/etc/php-fpm.conf) |
2 | nobody 9441 9440 0 13:57 ? 00:00:00 php-fpm: pool www |
3 | nobody 9442 9440 0 13:57 ? 00:00:00 php-fpm: pool www |
1 | tar xvzf ganglia-3.6.0. tar .gz |
3 | ./configure --with-gmetad --with-librrd=/opt/rrdtool-1.4.7 --prefix=/usr/ local /ganglia -- enable -gexec -- enable -status |
7 | cp /root/ganglia_install/ganglia-3.6.0/gmetad/gmetad.init /etc/init.d/gmetad |
修改配置文件/etc/init.d/gmetad,将配置行GMETAD=/usr/sbin/gmeta的内容修改为:
1 | GMETAD=/usr/ local /ganglia/sbin/gmetad |
修改配置文件/usr/local/ganglia/etc/gmetad.conf,将默认的data_source “my cluster” localhost修改为:
1 | data_source "log server" 10.10.2.245:8652 |
2 | data_source "hadoop" 10.10.3.104:8653 |
3 | data_source "data upload" 10.10.3.22:8654 |
这里,配置了3个监控组,每个组对应的数据源名称,已经对应的服务器地址和端口信息。我们知道,Ganglia集群的组成类似自包含的结构,亦即,Ganglia集群由主进程gmetad和多个gmond从进程集群组成,而每个gmond从进程集群又存在一个主gmond进程,其他的为从gmond进程,所以上面配置的每个data_source对应的IP:端口可以看成是gmond从进程集群的主gmond进程。
增加grid内容,如下所示:
1 | gridname "kaola statistics" |
增加rrd数据库路径:
1 | rrd_rootdir "/usr/local/ganglia/rrds" |
需要保证/usr/local/ganglia/rrds存在,不存在则手动创建,并修改目录属主:
1 | mkdir -p /usr/ local /ganglia/rrds |
2 | chown nobody:nobody -R /usr/ local /ganglia/rrds |
执行如下命令:
01 | tar xvzf ganglia-web-3.5.9. tar .gz |
02 | cd /usr/ local /ganglia/ |
05 | cp -r /root/ganglia_install/ganglia-web-3.5.9. tar .gz |
06 | tar xvzf ganglia-web-3.5.9. tar .gz |
07 | mv ganglia-web-3.5.9 ganglia |
09 | mkdir -p dwoo/compiled |
11 | chown nobody:nobody -R /usr/ local /ganglia/web |
修改配置文件/usr/local/ganglia/web/ganglia/conf_default.php,修改内容如下所示:
修改gweb_confdir变量,将
1 | $conf [ 'gweb_confdir' ] = "/var/lib/ganglia-web" ; |
修改为:
1 | $conf [ 'gweb_confdir' ] = "/usr/local/ganglia/web/ganglia" ; |
修改gmetad_root变量,将
1 | $conf['gmetad_root'] = "/var/lib/ganglia"; |
修改为:
1 | $conf [ 'gmetad_root' ] = "/usr/local/ganglia" ; |
修改rrdtool变量,将
1 | $conf [ 'rrdtool' ] = "/usr/bin/rrdtool" ; |
修改为:
1 | $conf [ 'rrdtool' ] = "/opt/rrdtool-1.4.7/bin/rrdtool" ; |
安装Nginx反向代理软件:
1 | tar xvzf nginx-1.6.0. tar .gz |
3 | ./configure --prefix=/usr/ local /nginx |
修改配置文件/usr/local/nginx/nginx.conf,在server中增加如下配置内容:
2 | root /usr/local/ganglia/web; |
3 | fastcgi_pass 127.0.0.1:9000; |
4 | fastcgi_index index.php; |
5 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
6 | include fastcgi_params; |
根据需要修改Nginx的其他配置,例如,可以修改worker_processes的值:
启动Nginx服务:
1 | /usr/ local /nginx/sbin/nginx |
启动ganglia:
这时,需要查看一下启动状态:
如果失败,先停掉服务:
然后根据提示信息排查错误,可以查看/var/log/messages来定位错误,修改相应的配置,例如出现错误:
1 | Jul 17 14:01:45 WSKJ_BJPBS-C10_MD08_i10_2013111204 /usr/local/ganglia/sbin/gmetad[9678]: Please make sure that /usr/local/ganglia/rrds is owned by nobody |
上面错误说明目录文件/usr/local/ganglia/rrds的属主信息有问题,可以根据提示修改属主即可。
Ganglia代理安装配置
Ganglia代理,即gmond进程,用来收集监控数据,需要在待监控的节点上安装配置后才能够正常工作。在每个待监控的节点上安装配置步骤都非常类似,下面介绍安装配置步骤:
与安装gmetad类似,首先保证yum源可用,可以查看或者修改,在目录下面/etc/yum.repo.d/可以添加或者修改。接着,就可以执行如下命令安装一些基础依赖软件包:
1 | yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpm-build glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel python-devel libXrender-devel pkgconfig |
如果安装过程中,没有出错,则可以正常进行下一步,如果出现错误,可以根据错误提示安装缺失的软件包,否则可能会影响后面的安装过程。
1 | tar jxvf pcre-8.33. tar .bz2 |
3 | ./configure --prefix=/usr --libdir=/usr/lib64 |
1 | tar zxvf ganglia-3.6.0. tar .gz |
3 | ./configure --prefix=/usr/ local /ganglia -- enable -gexec -- enable -status |
生成gmond配置文件:
1 | ./gmond -t > /usr/ local /ganglia/etc/gmond.conf |
修改/usr/local/ganglia/etc/gmond.conf配置文件,根据我们安装配置gmetad配置的data_source “hadoop” 10.10.3.104:8653,需要修改如下内容:
01 | # 指定在gmetad中配置的data_source名称hadoop,对应于这里的cluster的name值 |
05 | latlong = "unspecified" |
09 | # 修改端口号,与gmetad配置的data_source "hadoop" 10.10.3.104:8653保持一致 |
11 | mcast_join = 239.2.11.71 |
16 | # 修改端口号,与gmetad配置的data_source "hadoop" 10.10.3.104:8653保持一致 |
18 | mcast_join = 239.2.11.71 |
24 | # 修改端口号,与gmetad配置的data_source "hadoop" 10.10.3.104:8653保持一致 |
将/root/ganglia_install/ganglia-3.6.0/gmond/gmond.init复制到/etc/init.d/目录下,并改名为gmond,执行如下命令:
1 | cp /root/ganglia_install/ganglia-3.6.0/gmond/gmond.init /etc/init.d/gmond |
修改/etc/init.d/gmond脚本文件,将GMOND=/usr/sbin/gmond修改为/usr/local/ganglia/sbin/gmond,然后,就可以启动gmond进程了,执行如下命令:
查看gmond服务启动状态:
如果希望加入开机启动,可以执行如下命令:
至此,就完成了gmond服务的配置,对于其它待监控的节点上,安装配置gmond服务的过程是类似的。
Ganglia集群配置验证
将上面对应的gmetad服务和gmond服务配置完成,启动以后,可以通过查看gmetad服务器的Web监控页面,示例如图所示:
上面是Ganglia监控Web首页图,根据我们在/usr/local/ganglia/etc/gmetad.conf中配置的3个data_source进行分组统计分析监控数据,并以为分组的形式展示了一些监控的概要信息,如果想要查看某个data_source更详细的信息,可以直接选择下方的3个蓝色的图标链接,可以看到某个data_source组下多个节点的综合监控数据和图形,例如我们以其中配置的几台Hadoop节点为例,监控数据展示形式如下图所示:
这时,可以继续深入到每个节点中,查看每个节点的监控数据。