ganglia 安装配置指南

引言

Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次 结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。 

Hadoop原生的支持ganglia监控,并且可以自己配置metric

准备工作

操作系统安装

    安装rhel 5.7 64位。目前hadoop和大数据使用的机群redhat均为此版本。

修改使用centos

    vi /etc/yum.repos.d//rhel-debuginfo.repo,将文件内容改为以下内容,目的是能使用国防科大的centos源进行yum更新操作。

######################

[base]

name=CentOS-5 - Base

repo=os

baseurl=http://centos.ustc.edu.cn/centos/5/os/$basearch/

gpgcheck=1

gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5

[update]

name=CentOS-5 - Updates

baseurl=http://centos.ustc.edu.cn/centos/5/updates/$basearch/

gpgcheck=1

gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5

[addons]

name=CentOS-5 - Addons

baseurl=http://centos.ustc.edu.cn/centos/5/addons/$basearch/

gpgcheck=1

gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5

[extras]

name=CentOS-5 - Extras

baseurl=http://centos.ustc.edu.cn/centos/5/extras/$basearch/

gpgcheck=1

gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5

[centosplus]

name=CentOS-5 - Plus

baseurl=http://centos.ustc.edu.cn/centos/5/centosplus/$basearch/

gpgcheck=1

enabled=0

gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5

[contrib]

name=CentOS-5 - Contrib

baseurl=http://centos.ustc.edu.cn/centos/5/contrib/$basearch/

gpgcheck=1

enabled=0

gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5

###################

保存退出后执行命令

yum makecache

如果没有错误发生,说明该源可以使用。如果遇到错误,请尝试其它源(网易 sohu等)或检查配置。具体方法请自行Google Redhat使用centos源。

 

说明:以下安装过程所有命令默认使用root用户,拥有最高可执行权限。

服务端

安装rrdtool

1.1 安装pango

先安装一些必须的库。

yum -y install apr-devel apr-util check-devel cairo-devel libxml2-devel rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel python-devel libXrender-devel  libXext-devel libXft-devel

然后下载pangorpm安装包。

wget ftp://rpmfind.net/linux/centos/5.9/os/x86_64/CentOS/pango-devel-1.14.9-8.el5.centos.3.x86_64.rpm

wget ftp://rpmfind.net/linux/centos/5.9/os/x86_64/CentOS/pango-1.14.9-8.el5.centos.3.x86_64.rpm

依次安装之

rpm -ivh pango-1.14.9-8.el5.centos.3.x86_64.rpm

rpm -ivh pango-devel-1.14.9-8.el5.centos.3.x86_64.rpm

可能碰到的问题:

安装pango的时候可能会提示已经安装了更新版本的包,这里由于还要安装pango-devel,我们下载的两个包是配套的,因此需要将新版本的pango先卸载掉。

rpm -qa | grep pango (假如输出如下)

pango-1.14.9-8.el5_6.2

pango-1.14.9-8.el5_6.2

rpm -e --allmatches --nodeps pango-1.14.9-8.el5_6.2

卸载成功以后即可通过上面的命令安装pango

1.2 安装rrdtool

RRDtool (Round Robin Database Tool)就是一个强大的绘图的引擎,很多工具例如MRTG都可以调用rrdtool绘图。RRDtool是指Round Robin Database 工具(环状数据库)。Round robin是一种处理定量数据、以及当前元素指针的技术。

ganglia使用rrdtool来存储数据并绘图。

cd /opt/
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.1.tar.gz

tar -zxvf rrdtool-1.3.1.tar.gz 

cd rrdtools

export PKG_CONFIG_PATH=/usr/lib/pkgconfig/

./configure

make
make install
cd /usr/local/
ln -s rrdtool-1.3.1/ rrdtool
cd rrdtool
ls –l

cd ..

rm  rrdtool-1.3.1.tar.gz

验证rrdtool是否安装成功。

    您可以到/usr/local/rrdtool/share/rrdtool/examples/ directory 下运行它们去查看你是否成功安装了RRDTool

#cd /usr/local/rrdtool/share/rrdtool/examples/
#./stripes.pl
#ls -l
#cp stripes.png  /var/www/html/  (这一步骤的前提是你本机是个WWW服务器器)

在浏览器中输入http://your-domain.com/stripes.png ,看看自己的图形

或者直接把stripes.png拷贝到windows机器上用相应的软件打开查看。

编译安装ganglia server

ganglia分为服务器端和客户端,编译后文件名是gmetadgmond,其中gmetad是服务器端,gmond是客户端,服务器端只有一个,而 被监控服务器均安装客户端。很有意思的是,Ganglia采用Internet IPv4 D地址中的的组播进行数据请求。我猜可能主要是为了实现一对多节省带宽的需要。其实现原理应该是gmetad发送一个请求到一个组播地址,由于是组播地 址,所以gmetad只需发送一次请求包即可完成对所有gmond的轮询。(如果是单播,则Ganglia需要向每台服务器均发送一次轮询请求,这样的 话,集群数量多了,主服务器光发送就会占用不小的带宽。而Ganglia本身是为大规模集群所做的HPC而生的,如果占用很高的带宽和占用很大量的CPU 资源去处理网络数据就不符合其设计理念了。)然后gmond通过这个请求将采集到的数据返回给gmetadgmetad将数据保存在rrd数据库中,然 后通过web界面绘图展示。

本部分内容介绍服务端的编译和安装。前面部分所做的工作都是为服务端编译准备条件。只有服务端需要rrdtool。服务端只需要在一台机器上安装。

yum install -y expat expat-devel pcre pcre-devel

 

cd /opt/

wget http://download.savannah.gnu.org/releases/confuse/confuse-2.7.tar.gz
tar zxf confuse-2.7.tar.gz
cd confuse-2.7
./configure CFLAGS=-fPIC --disable-nls ;make;make install 

 

cd /opt/

wget http://downloads.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.3.1/ganglia-3.3.1.tar.gz
tar zxf ganglia-3.3.1.tar.gz
cd ganglia-3.3.1

./configure --prefix=/opt/modules/ganglia --with-static-modules --enable-gexec --enable-status --with-gmetad --with-python=/usr --with-librrd=/usr/local/rrdtool-1.3.1 --with-libexpat=/usr --with-libconfuse=/usr --with-libpcre=/usr

make; make install

cd gmetad
cp gmetad.conf /opt/modules/ganglia/etc/
cp gmetad.init /etc/init.d/gmetad
sed -i "s/^GMETAD=\/usr\/sbin\/gmetad/GMETAD=\/opt\/modules\/ganglia\/sbin\/gmetad/g" /etc/init.d/gmetad
chkconfig --add gmetad

ip route add 239.2.11.71 dev eth0
service gmetad start

    其中239.2.11.71是ganglia使用的多播工作通道,需要将其指向本地网卡上。上面使用了ip route命令进行路由指定。

安装 php环境

    ganglia使用一个web前端服务来展示监控信息。该服务是使用php编写的。因此需要配置php运行环境。

yum install httpd

yum install php

service httpd start

/var/www/html/下面建立一个文件info.php,内容如下:

<?

  phpinfo();

?>

在浏览器中输入http://your-domain.com/info.php,看看是否能正常工作。

 ganglia 安装配置指南_第1张图片

如果看到以上内容,说明你的php环境已经正常工作了。

/opt/ganglia/web目录拷贝到/var/www/html目录下,然后在web目录下执行以下命令

cp conf_default.php.in conf_default.php

cp version.php.in version.php

使用vi编辑conf_default.php,按照以下内容修改相关设置

[root@ganglia ganglia]# diff conf_default.php conf_default.php.in

29,30c29,30

< $conf['gmetad_root'] = "/var/lib/ganglia/rrds";

< $conf['rrds'] = "/var/lib/ganglia/rrds";

---

> $conf['gmetad_root'] = "@varstatedir@/ganglia";

> $conf['rrds'] = "${conf['gmetad_root']}/rrds";

46c46

< $conf['rrdtool'] = "/usr/local/rrdtool/bin/rrdtool";

---

> $conf['rrdtool'] = "/usr/bin/rrdtool";

在浏览器中输入http://yourserver/ganglia,看是否有内容输出。

如果页面空白或者提示有php错误发生,请到/var/log/httpd/下面tail error_log,根据相关错误信息进行修改。

注意检查/var/lib/ganglia及以下目录是否存在,且这些目录的所有者要属于nobody:nobody用户,并且nobody拥有读写权限,这里我索性将目录权限设置为777。这里许多目录都是要自己手动创建,比如conf dwoo,只需根据错误提示修改即可。

如果报错There was an error collecting ganglia data (127.0.0.1:8652): fsockopen error: Connection refused,然后gmetad status显示gmetad 已死,但是 subsys 被锁,这需要改一下目录的权限 chown nobody:nobody /var/lib/ganglia/rrds即可解决。

客户端

客户端需要在多台机器上安装。将以下脚本分发到各个机器上分别执行安装就可以了。安装过程中注意观察是否有错误发生。

这是redhat安装方法

#!/bin/sh
yum install -y expat expat-devel pcre pcre-devel
wget http://mirror.bit.edu.cn/apache/apr/apr-1.4.6.tar.gz
tar zxf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure;make;make install 
cd ..
wget http://download.savannah.gnu.org/releases/confuse/confuse-2.7.tar.gz
tar zxf confuse-2.7.tar.gz
cd confuse-2.7
./configure CFLAGS=-fPIC --disable-nls ;make;make install 
cd ..
wget http://downloads.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.3.1/ganglia-3.3.1.tar.gz
tar zxf ganglia-3.3.1.tar.gz
cd ganglia-3.3.1
#server
#./configure --prefix=/opt/modules/ganglia --with-static-modules --enable-gexec --enable-status --with-gmetad --with-python=/usr --with-librrd=/opt/rrdtool-1.4.5 --with-libexpat=/usr --with-libconfuse=/usr/local --with-libpcre=/usr/local
#client
./configure --prefix=/opt/modules/ganglia --enable-gexec --enable-status --with-python=/usr --with-libapr=/usr/local/apr/bin/apr-1-config --with-libconfuse=/usr/local --with-libexpat=/usr --with-libpcre=/usr
make; make install
cd gmond
./gmond -t > /opt/modules/ganglia/etc/gmond.conf
cp gmond.init /etc/init.d/gmond
sed -i "s/^GMOND=\/usr\/sbin\/gmond/GMOND=\/opt\/modules\/ganglia\/sbin\/gmond/g" /etc/init.d/gmond
chkconfig --add gmond
ip route add 239.2.11.71 dev eth0
service gmond start

如果gmond服务正常启动则说明安装成功。

 

 

对于ubuntuUbuntu ganglia配置文件位于/etc/ganglia/gmond.conf

apt-get install ganglia-monitor

useradd ganglia -g ganglia

/etc/init.d/ganglia-monitor restart

ganglia监控设置

ganglia默认使用多播方式传输数据,但也支持单播。多播要求所有机器都在一个网段内部,但有时要监控的机器位于不同的网段,这时候只能使用单播方式。

多播方式

多播方式配置比较简单。

服务端配置文件 /opt/modules/ganglia/etc/gmetad.conf (注:gmeta daemon

注:cluster_name一定要与要监控的配置中的cluster name相同。gmond_node1-n指的要监控的机器名

data_source "cluster_name" gmond_node1 gmond_node2 ... gmond_noden

说明:cluster_name是监控机群名称。可以配置多个,也就是分组。比如将zookeeper集群作为一个监控分组,hdfs集群作为一个分组,hbase作为一个分组(如果hbasehdfs分别部署在不同的节点上)。ganglia默认使用端口8649,因此如果你只有一个集群的话,可以使用不写端口号;如果你是监控多个分组的话,就需要以gmond_node1:port的形式列出gmond客户端。例如 

data_source "hdfs" localhost 192.168.0.101:8649

data_source "zookeeper" 210.51.44.102:8650

在多播方式下,所有的gmond节点通过多播的形式发送各自的数据,也就是每一个gmond节点上面都完整的存了一份所有gmond节点的监控数据,gmetad只需要向其中的一个gmond索取数据即可,这里gmetad首先到第一个查询,如果失败,查询第二个,以此类推。

监控客户端配置文件/opt/modules/ganglia/etc/gmond.conf (注:gmonitor daemon

globals段:gmond的全局配置,一般不需要修改

cluster段:这一段是重要的一段,至少需要定义name变量,所有name相同的节点将认为在同一个集群(监控分组)里,其他变量是对该集群的说明。

host段:只有一个变量,location,是对这个节点的一些说明,一般不用修改。

udp_send_channel段:这也是很重要的一段,可以定义多个这样的段,不过如果在同一局域网内,只有一个集群的环境下,这一段保持默认也可以工作的很好。ganglia默认采用多播发送监控数据,mcast_join变量指定多播组。port 指定端口号,根据当前节点所在的分组,与gmetad.conf中的端口对应起来,ttl指定跳数一般为1,如果需要经过gmond中转,需要修改这个跳数。

udp_recv_channel段:对应于udp_send_channel段,也可以设置多个。

tcp_accept_channel段:指定一个端口,可以通过TCP的的方式,从这个端口读取XML格式的监控数据

总结一下,如果只是完成最简单的监控任务:整个配置文件只需要修改一个地方,就是clustername变量

单播方式

如果监控的集群跨网段,就需要使用单播方式。单播其实就是所有的gmond节点指定一台机器来存储大家的监控数据。要使用单播方式,gmetad.conf不需要修改。只需要修改gmond.conf

udp_send_channel段,使用host变量来指定接受数据的机器。值得注意的是,mcast_joinhost不能同时出现在一个channel里。

udp_recv_channel使用bind变量指出的ipip必须所有其他gmond可以访问到。事实上,可以使用0.0.0.0。这里我发现直接将bind注释掉也可以正常工作。

多播方式:

 

单播方式:

 ganglia 安装配置指南_第2张图片

集群分组

前面已经简单介绍了分组的设置,其实就是根据端口好的不同来确定机器的不同分组。举例如下

 ganglia 安装配置指南_第3张图片

ganglia 安装配置指南_第4张图片

ganglia 安装配置指南_第5张图片

 

 

 

    如果是使用单播,参照以上所述修改配置即可。

    最后附上一张监控图。

 

ganglia 安装配置指南_第6张图片

总结

总体来说编译配置ganglia是比较复杂的。主要有两个地方:一是编译rrdtool,二是web环境配置。ganglia配置文件这里我耽误了不少时间,不过有了上面的解释,相信你会很容成功的。总之,事在人为,相信自己,不要放弃,你一定会成功的!

[参考资料]

Ganglia汇总监控搭建和配置详解 作者:easyhadoop 项磊

ganglia监控集群 

等等。。。。

你可能感兴趣的:(ganglia)