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
gmond相当于一个代理(agent)服务进程,它被部署在待监控的各个节点上,主要负责与宿主节点操作系统交互,获取到节点的一些监控数据,如CPU负载、磁盘容量、内存容量、网络状况等等。gmond进程收集到很多监控的元数据信息后,等待gmetad周期性地轮询这些信息。gmond进程运行时给系统带来的负载是非常小的,从而不会影响用户应用程序性能。
从《Monitoring with Ganglia》一书中引用一个给出的gmond架构图,如图所示:
这是2个gmond集群,每个集群有一个是主节点,其余的是从节点,主节点上的gmond服务与该gmond集群中其它从节点通信收集监控数据,gmond集群中的主节点通过组播的方式与gmetad服务器通信。
- gmetad
gmetad可以看成是Ganglia集群的Master,它采用poll的方式,主动与集群中各个gmond进程交互,周期性地轮询每个gmond进程收集到的元数据,然后存储到RRD数据库中,为Web展示监控数据做准备。
- gweb
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/可以添加或者修改。接着,就可以执行如下命令安装一些基础依赖软件包:
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
如果安装过程中,没有出错,则可以正常进行下一步,如果出现错误,可能会影响后面的安装过程。
- 安装PCRE软件包
tar jxvf pcre-8.33.tar.bz2 cd pcre-8.33 ./configure --prefix=/usr --libdir=/usr/lib64 make make install
- 安装confuse软件包
tar zxvf confuse-2.7.tar.gz cd confuse-2.7 ./configure CFLAGS=-fPIC --disable-nls make make install
- 安装rrdtool软件包
tar xvzf rrdtool-1.4.7.tar.gz cd rrdtool-1.4.7/ ./configure make make install ln -s /opt/rrdtool-1.4.7/lib/librrd.so.4 /usr/lib64/librrd.so.4 ln -s /opt/rrdtool-1.4.7/lib/librrd.so.4 /usr/lib64/librrd.so
rrdtool默认会安装到/opt/rrdtool-1.4.7目录下面。
- 安装PHP软件包
tar xvzf php-5.5.14.tar.gz cd php-5.5.14 ./configure --enable-fpm make make install cd /usr/local/etc/ cp php-fpm.conf.default php-fpm.conf
修改配置文件/usr/local/etc/php-fpm.conf,在php-fpm.conf中找到如下行:
;security.limit_extensions = .php .php3 .php4 .php5
将配置行修改为如下内容:
security.limit_extensions = .php .php3 .php4 .php5 .htm .html .png .jpeg .gif .jpg .js .css
因为Ganglia Web监控是PHP实现的,我们需要保证对于一些图片或者脚本都能够正常加载,才能够浏览到直观完整的图形界面,便于监控理解。
启动fpm,执行如下命令:
/usr/local/sbin/php-fpm
验证php-fpm启动成功,可以执行如下命令:
ps -ef | grep php-fpm
如果能够看到类似如下的几个进程表示启动成功:
root 9440 1 0 13:57 ? 00:00:00 php-fpm: master process (/usr/local/etc/php-fpm.conf) nobody 9441 9440 0 13:57 ? 00:00:00 php-fpm: pool www nobody 9442 9440 0 13:57 ? 00:00:00 php-fpm: pool www
- 安装配置Ganglia
tar xvzf ganglia-3.6.0.tar.gz cd ganglia-3.6.0 ./configure --with-gmetad --with-librrd=/opt/rrdtool-1.4.7 --prefix=/usr/local/ganglia --enable-gexec --enable-status make make install cp /root/ganglia_install/ganglia-3.6.0/gmetad/gmetad.init /etc/init.d/gmetad
修改配置文件/etc/init.d/gmetad,将配置行GMETAD=/usr/sbin/gmeta的内容修改为:
GMETAD=/usr/local/ganglia/sbin/gmetad
修改配置文件/usr/local/ganglia/etc/gmetad.conf,将默认的data_source “my cluster” localhost修改为:
data_source "log server" 10.10.2.245:8652 data_source "hadoop" 10.10.3.104:8653 data_source "data upload" 10.10.3.22:8654
这里,配置了3个监控组,每个组对应的数据源名称,已经对应的服务器地址和端口信息。我们知道,Ganglia集群的组成类似自包含的结构,亦即,Ganglia集群由主进程gmetad和多个gmond从进程集群组成,而每个gmond从进程集群又存在一个主gmond进程,其他的为从gmond进程,所以上面配置的每个data_source对应的IP:端口可以看成是gmond从进程集群的主gmond进程。
增加grid内容,如下所示:
gridname "kaola statistics"
增加rrd数据库路径:
rrd_rootdir "/usr/local/ganglia/rrds"
需要保证/usr/local/ganglia/rrds存在,不存在则手动创建,并修改目录属主:
mkdir -p /usr/local/ganglia/rrds chown nobody:nobody -R /usr/local/ganglia/rrds
- 安装ganglia-web
执行如下命令:
tar xvzf ganglia-web-3.5.9.tar.gz cd /usr/local/ganglia/ mkdir web cd web cp -r /root/ganglia_install/ganglia-web-3.5.9.tar.gz tar xvzf ganglia-web-3.5.9.tar.gz mv ganglia-web-3.5.9 ganglia cd ganglia mkdir -p dwoo/compiled mkdir -p dwoo/cache chown nobody:nobody -R /usr/local/ganglia/web
修改配置文件/usr/local/ganglia/web/ganglia/conf_default.php,修改内容如下所示:
修改gweb_confdir变量,将
$conf['gweb_confdir'] = "/var/lib/ganglia-web";
修改为:
$conf['gweb_confdir'] = "/usr/local/ganglia/web/ganglia";
修改gmetad_root变量,将
$conf['gmetad_root'] = "/var/lib/ganglia";
修改为:
$conf['gmetad_root'] = "/usr/local/ganglia";
修改rrdtool变量,将
$conf['rrdtool'] = "/usr/bin/rrdtool";
修改为:
$conf['rrdtool'] = "/opt/rrdtool-1.4.7/bin/rrdtool";
- 安装Nginx
安装Nginx反向代理软件:
tar xvzf nginx-1.6.0.tar.gz cd nginx-1.6.0 ./configure --prefix=/usr/local/nginx make make install
修改配置文件/usr/local/nginx/nginx.conf,在server中增加如下配置内容:
location /ganglia/ { root /usr/local/ganglia/web; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
根据需要修改Nginx的其他配置,例如,可以修改worker_processes的值:
worker_processes 2;
启动Nginx服务:
/usr/local/nginx/sbin/nginx
- 启动ganglia服务
启动ganglia:
service gmetad start
这时,需要查看一下启动状态:
service gmetad status
如果失败,先停掉服务:
service gmetad stop
然后根据提示信息排查错误,可以查看/var/log/messages来定位错误,修改相应的配置,例如出现错误:
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/可以添加或者修改。接着,就可以执行如下命令安装一些基础依赖软件包:
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
如果安装过程中,没有出错,则可以正常进行下一步,如果出现错误,可以根据错误提示安装缺失的软件包,否则可能会影响后面的安装过程。
- 安装PCRE软件包
tar jxvf pcre-8.33.tar.bz2 cd pcre-8.33 ./configure --prefix=/usr --libdir=/usr/lib64 make make install
- 安装配置gmond服务
tar zxvf ganglia-3.6.0.tar.gz cd ganglia-3.6.0 ./configure --prefix=/usr/local/ganglia --enable-gexec --enable-status make make install
生成gmond配置文件:
./gmond -t > /usr/local/ganglia/etc/gmond.conf
修改/usr/local/ganglia/etc/gmond.conf配置文件,根据我们安装配置gmetad配置的data_source “hadoop” 10.10.3.104:8653,需要修改如下内容:
# 指定在gmetad中配置的data_source名称hadoop,对应于这里的cluster的name值 cluster { name = "hadoop" owner = "unspecified" latlong = "unspecified" url = "unspecified" } # 修改端口号,与gmetad配置的data_source "hadoop" 10.10.3.104:8653保持一致 udp_send_channel { mcast_join = 239.2.11.71 port = 8653 ttl = 1 } # 修改端口号,与gmetad配置的data_source "hadoop" 10.10.3.104:8653保持一致 udp_recv_channel { mcast_join = 239.2.11.71 port = 8653 bind = 239.2.11.71 retry_bind = true } # 修改端口号,与gmetad配置的data_source "hadoop" 10.10.3.104:8653保持一致 tcp_accept_channel { port = 8653 gzip_output = no } # 修改被监控主机信息 host { location = "dataNode" }
将/root/ganglia_install/ganglia-3.6.0/gmond/gmond.init复制到/etc/init.d/目录下,并改名为gmond,执行如下命令:
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进程了,执行如下命令:
service gmond start
查看gmond服务启动状态:
service gmond status
如果希望加入开机启动,可以执行如下命令:
chkconfig --add 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节点为例,监控数据展示形式如下图所示:
这时,可以继续深入到每个节点中,查看每个节点的监控数据。
本文基于署名-非商业性使用-相同方式共享 4.0许可协议发布,欢迎转载、使用、重新发布,但务必保留文章署名时延军(包含链接:http://shiyanjun.cn),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
博主你好,我按照你的教程搭建,在访问ganglia在web上一直404,
web的日志在哪里呢?谢谢
博主,404一直找不到,我把web下的ganglia放到nginx/html下,现在是403
2016/03/23 14:44:01 [error] 4248#0: *2 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:47:19 [error] 4270#0: *1 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:47:21 [error] 4270#0: *1 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:47:46 [error] 4270#0: *2 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:49:38 [error] 4303#0: *1 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:54:40 [error] 4362#0: *1 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:54:42 [error] 4362#0: *1 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:54:45 [error] 4362#0: *1 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:55:00 [error] 4362#0: *2 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
2016/03/23 14:55:01 [error] 4362#0: *3 directory index of “/usr/local/nginx/html/ganglia/” is forbidden, client: 10.96.15.49, server: localhost, request: “GET /ganglia/ HTTP/1.1″, host: “10.96.140.112″
你安装时候没出现过这个问题吗?
估计你可能要修改对应目录的权限,启动ganglia进程用户和目录权限不匹配吧
你好,确实是用户权限做天弄好了,但是我启动的时候,Hosts up: 0
有些图片加载不上来,还有一些乱码?请问你遇到过没??
图片加载不出来,在浏览器按f12 看为什么没出来。新的ganglia-web里边默认联网加载几个jquery的脚本。要是这几个脚本的的原因,可以通过其他方法下载下来,放在本地。更改conf.php路径就可以了。
还是你忘记把其它配置给粘贴出来了?谢谢