参考:
https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/Ganglia
http://blog.csdn.net/iAm333/article/details/16358509
Ganglia是 UCBerkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个gmond 的守护进程用于收集和发送度量数据(如处理器速度、内存使用量等)。gmetad进程接收gmond进程收集的数据并通过php脚本动态的生成图表表示。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。
一、Ganglia组件
Ganglia 监控套件包括三个主要部分:gmond,gmetad,和网页接口。
Gmond :是一个守护进程,运行在每一个需要监测的节点上,收集监测统计,发送和接受在同一个组播或单播通道上的统计信息 。如果他是一个发送者(mute=no)他会收集基本指标,比如系统负载(load_one),CPU利用率。他同时也会发送用户通过添加C/Python模块来自定义的指标。 如果他是一个接收者(deaf=no)他会聚合所有从别的主机上发来的指标,并把它们都保存在内存缓冲区中。
Gmetad:也是一个守护进程,他定期检查gmonds,从那里拉取数据,并将他们的指标存储在RRD存储引擎中。他可以查询多个集群并聚合指标。他也被用于生成用户界面的web前端。
Ganglia-web:顾名思义,他应该安装在有gmetad运行的机器上,以便读取RRD文件。 集群是主机和度量数据的逻辑分组,比如数据库服务器,网页服务器,生产,测试,QA等,他们都是完全分开的,你需要为每个集群运行单独的gmond实例。
Ganglia工作流1如下图所示((收集数据的每个节点有一个gmond,整个集群只有一个gmetad,且gmond都作为发送方):
左边是运行在各个节点上的gmond进程,这个进程的配置只由节点上gmond.conf的文件决定。所以,在各个监视节点上都需要安装和配置该文件。
右上角是负责的中心机(通常是这个集群中的一台,也可以不是)。在这个台机器上运行这着gmetad进程,收集来自各个节点上的信息并存储在rrdtool上,该进程的配置只由gmetad.conf决定。
右下角显示了关于网页方面的一些信息。我们的浏览网站时调用php脚本,从RRDTool数据库中抓取信息,动态的生成各类图表。
Ganglia工作流2如下图所示(收集数据的每个节点有一个gmond,整个集群有不止一个gmetad,但一般需要有一个中央gmetad收集所有数据,用php脚本生成graph。其中gmond不都作为发送方,每个逻辑分组中可能有一个是接收方,用于接收其它gmond发送的数据存储在缓存中)
二、安装依赖
注:建议使用超级用户安装
1. yum install –y gcc gcc-c++ libpng freetype zlib libdbi apr* libxml2-devel pkg-config g pixman pango pango-devel freetye-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel pcre* rrdtool*
三、安装expat依赖
1. wget http://jaist.dl.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz
2. tar -xf expat-2.1.0.tar.gz
3. cd expat-2.1.0
4. ./configure --prefix=/usr/local/expat
5. make
6. make install
对于64位操作系统,需要手动的拷贝下动态链接库到lib64下
1. mkdir /usr/local/expat/lib64
2. cp -a /usr/local/expat/lib/* /usr/local/expat/lib64/
四、安装confuse
1. wget http://ftp.twaren.net/Unix/NonGNU//confuse/confuse-2.7.tar.gz
2. tar -xf confuse-2.7.tar.gz
3. cd confuse-2.7
4. ./configure CFLAGS=-fPIC --disable-nls --prefix=/usr/local/confuse
5. make
6. make install
64bit机器需要拷贝动态链接库:
1. mkdir -p /usr/local/confuse/lib64
2. cp -a -f /usr/local/confuse/lib/* /usr/local/confuse/lib64/
五、安装ganglia到家目录
1. wget http://jaist.dl.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.6.0ganglia-3.6.0.tar.gz
2. tar -xf ganglia-3.6.0.tar.gz
3. cd ganglia-3.6.0
4. ./configure --with-gmetad--enable-gexec --with-libconfuse=/usr/local/confuse --with-libexpat=/usr/local/expat--prefix=/home/username/tools/ganglia --sysconfdir=/home/username/tools/ganglia/etc
5. make
6. make install
六、服务端配置
选择76作为服务器端,创建rrdtool数据目录,看$ganglia-web中conf.php里面的gmetad_root变量,并根据apache的运行用户创建权限,例如apache运行于apache用户上 。
1. sudo mkdir -p /var/lib/ganglia/rrds
2. sudo mkdir -p /var/lib/ganglia/dwoo
配置一个数据源,修改gmetad.conf(/home/zhangweitao/hive-common/ganglia/etc)文件,同时将运行用户设置为rrdtool的目录权限用户,例如apache用户
1. data_source "hadoop_username"10.3.1.76:8659 10.3.1.77:8659 10.3.1.78:8659 10.3.1.79:8659
2. setuid_username "root"
说明:这里的 "hadoop_username " 表示的是集群的名称,后面的内容是这个集群中所包含的主机信息,也就是要监控的主机ip。如果要添加监控的集群需要在此处加入新的data_source
添加自启动脚本
1. #cp -f ganglia/gmetad/gmetad.init /etc/init.d/gmetad
2. #cp -f $GANGLIA_HOME/sbin/gmetad /usr/sbin/gmetad
3. #chkconfig --add gmetad
启动gmetad服务
1. #service gmetad start
看见Starting GANGLIAgmetad: [ OK ]就代表运行正常了。 通过telnet localhost 8651验证gmetad是否正常
七、客户端配置(gmond节点)
环境变量配置,在.bashrc文件中加入:
1. export GANGLIA_HOME=/home/username/tools/ganglia
2. exportPATH=$GANGLIA_HOME/bin/:$PATH
3. exportPATH=$GANGLIA_HOME/sbin/:$PATH
对于生成的默认配置文件需要做适当的修改
1. globals {
2. daemonize = yes
3. setuid = yes
4. user = username /*运行Ganglia的用户*/
5. debug_level = 0
6. max_udp_msg_len = 1472
7. mute = no
8. deaf = no
9. host_dmax = 120 /*secs */
10. cleanup_threshold = 300 /*secs */
11. gexec = no
12. send_metadata_interval = 15 /*发送数据的时间间隔*/
13. }
14.
15. cluster {
16. name = "hadoop_username" /*集群名称*/
17. owner = "username" /*运行Ganglia的用户*/
18. latlong = "unspecified"
19. url = "unspecified"
20. }
21.
22. udp_send_channel {
23. # mcast_join = 239.2.11.71 /*注释掉组播*/
24. host = 10.3.1.76/*发送给安装gmetad的机器*/
25. port = 8659
26. ttl = 1
27. }
28.
29. udp_recv_channel { #接受UDP包配置
30. # mcast_join = 239.2.11.71
31. port = 8659
32. # bind = 239.2.11.71
33. }
八、服务端的WEB配置
PHP程序需要依赖Apache来运行,因此需要安装如下依赖
1. # yum -y install php httpd
2. # service httpd start //启动httpd 服务
九、测试安装是否成功
1. # vi /var/www/html/index.php
输入:
1.
2. phpinfo();
3. ?>
保存,然后浏览器 master/index.php
正常是看到php的信息。
1. #cd /home/ruifeng.shan
2. #wget http://jaist.dl.sourceforge.net/project/ganglia/ganglia-web/3.5.10/ganglia-web-3.5.10.tar.gz
3. #tar -xf ganglia-web-3.5.10.tar.gz
4. #cd ganglia-web-3.5.10
5. #make install
开启httpd服务
1. #service httpd restart
使用http://master/ganglia查看对应的ganglia信息。
十、hadoop配置
需要配置hadoop-2.2.0/etc/hadoop/目录下的hadoop-metrics.properties和hadoop-metrics2.properties文件。
其中,hadoop-metrics.properties配置如下(注意端口号的更改):
1. #Configuration of the "dfs" context for null
2. dfs.class=org.apache.hadoop.metrics.spi.NullContext
3.
4. #Configuration of the "dfs" context for file
5. #dfs.class=org.apache.hadoop.metrics.file.FileContext
6. #dfs.period=10
7. #dfs.fileName=/tmp/dfsmetrics.log
8.
9. #Configuration of the "dfs" context for ganglia
10. # Pickone: Ganglia 3.0 (former) or Ganglia 3.1 (latter)
11. dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext
12. dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
13. dfs.period=10
14. dfs.servers=10.3.1.76:8659
15.
16. #Configuration of the "mapred" context for null
17. mapred.class=org.apache.hadoop.metrics.spi.NullContext
18.
19. #Configuration of the "mapred" context for file
20. #mapred.class=org.apache.hadoop.metrics.file.FileContext
21. #mapred.period=10
22. #mapred.fileName=/tmp/mrmetrics.log
23.
24. #Configuration of the "mapred" context for ganglia
25. # Pickone: Ganglia 3.0 (former) or Ganglia 3.1 (latter)
26. mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext
27. mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
28. mapred.period=10
29. mapred.servers=10.3.1.76:8659
30.
31. # Configurationof the "jvm" context for null
32. #jvm.class=org.apache.hadoop.metrics.spi.NullContext
33.
34. #Configuration of the "jvm" context for file
35. jvm.class=org.apache.hadoop.metrics.file.FileContext
36. jvm.period=10
37. jvm.fileName=/tmp/jvmmetrics.log
38.
39. #Configuration of the "jvm" context for ganglia
40. jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext
41. jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
42. jvm.period=10
43. jvm.servers=10.3.1.76:8659
44.
45. #Configuration of the "rpc" context for null
46. rpc.class=org.apache.hadoop.metrics.spi.NullContext
47.
48. #Configuration of the "rpc" context for file
49. rpc.class=org.apache.hadoop.metrics.file.FileContext
50. rpc.period=10
51. rpc.fileName=/tmp/rpcmetrics.log
52.
53. #Configuration of the "rpc" context for ganglia
54. rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext
55. rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
56. rpc.period=10
57. rpc.servers=10.3.1.76:8659
58.
59.
60. #Configuration of the "ugi" context for null
61. ugi.class=org.apache.hadoop.metrics.spi.NullContext
62.
63. #Configuration of the "ugi" context for file
64. #ugi.class=org.apache.hadoop.metrics.file.FileContext
65. #ugi.period=10
66. #ugi.fileName=/tmp/ugimetrics.log
67.
68. #Configuration of the "ugi" context for ganglia
69. ugi.class=org.apache.hadoop.metrics.ganglia.GangliaContext
70. ugi.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
71. ugi.period=10
72. ugi.servers=10.3.1.76:8659
hadoop-metrics2.properties文件配置如下:
1. #*.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink
2. #default sampling period, in seconds
3. #*.period=10
4.
5. # Thenamenode-metrics.out will contain metrics from all context
6. #namenode.sink.file.filename=namenode-metrics.out
7. #Specifying a special sampling period for namenode:
8. #namenode.sink.*.period=8
9.
10. #datanode.sink.file.filename=datanode-metrics.out
11.
12. # thefollowing example split metrics of different
13. #context to different sinks (in this case files)
14. #jobtracker.sink.file_jvm.context=jvm
15. #jobtracker.sink.file_jvm.filename=jobtracker-jvm-metrics.out
16. #jobtracker.sink.file_mapred.context=mapred
17. #jobtracker.sink.file_mapred.filename=jobtracker-mapred-metrics.out
18.
19. #tasktracker.sink.file.filename=tasktracker-metrics.out
20.
21. #maptask.sink.file.filename=maptask-metrics.out
22.
23. #reducetask.sink.file.filename=reducetask-metrics.out
24.
25. *.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
26. *.sink.ganglia.period=10
27.
28. *.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
29. *.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
30.
31. namenode.sink.ganglia.servers=10.3.1.76:8659
32. resourcemanager.sink.ganglia.servers=10.3.1.76:8659
33.
34. datanode.sink.ganglia.servers=10.3.1.76:8659
35. nodemanager.sink.ganglia.servers=10.3.1.76:8659
36.
37. maptask.sink.ganglia.servers=10.3.1.76:8659
38. reducetask.sink.ganglia.servers=10.3.1.76:8659
十一、分发新的hadoop配置、bashrc和ganglia到集群节点
1. #!/bin/sh
2. #
3. scphadoop/etc/hadoop/hadoop-metrics.properties [email protected]:~/hadoop/etc/hadoop/
4. scphadoop/etc/hadoop/hadoop-metrics.properties [email protected]:~/hadoop/etc/hadoop/
5. scphadoop/etc/hadoop/hadoop-metrics.properties [email protected]:~/hadoop/etc/hadoop/
6.
7. scphadoop/etc/hadoop/hadoop-metrics2.properties [email protected]:~/hadoop/etc/hadoop/
8. scphadoop/etc/hadoop/hadoop-metrics2.properties [email protected]:~/hadoop/etc/hadoop/
9. scphadoop/etc/hadoop/hadoop-metrics2.properties [email protected]:~/hadoop/etc/hadoop/
10.
11. ##restart hadoop
12. stop-all.sh> /dev/null 2>&1
13. start-all.sh> /dev/null 2>&1
14.
15. scp -rtools/ganglia [email protected]:~/tools
16. scp -rtools/ganglia [email protected]:~/tools
17. scp -rtools/ganglia [email protected]:~/tools
18.
19. scp.bashrc [email protected]:~/
20. scp.bashrc [email protected]:~/
21. scp.bashrc [email protected]:~/
22.
23. #gmond--debug=100 > /dev/null 2>&1
24. ps -ef|grep "username.*gmond$"|awk '{print $2}'|xargs kill -9
25. gmond
26. echo"gmond 76 started!"
27.
28. ssh [email protected]> /dev/null 2>&1 << eeooff
29. source~/.bashrc
30. ps -ef|grep "username.*gmond$"|awk '{print $2}'|xargs kill -9
31. #gmond--debug=100
32. gmond
33. exit
34. eeooff
35. echo"gmond 77 started!"
36.
37. ssh [email protected]> /dev/null 2>&1 << eeooff
38. source~/.bashrc
39. ps -ef|grep "username.*gmond$"|awk '{print $2}'|xargs kill -9
40. #gmond--debug=100
41. gmond
42. exit
43. eeooff
44. echo"gmond 78 started!"
45.
46. ssh [email protected]> /dev/null 2>&1 << eeooff
47. source~/.bashrc
48. ps -ef|grep "username.*gmond$"|awk '{print $2}'|xargs kill -9
49. #gmond--debug=100
50. gmond
51. exit
52. eeooff
53. echo"gmond 79 started!"
十二、查看监控结果
打开浏览器输入http://10.3.1.76/ganglia即可看到由PHP动态生成的监控状态图表: