最近研究了一下与Hadoop结合很好的监控工具Ganglia,在做hadoop平台的时候这个工具对于系统的监控有非常好的帮助。
最近部署了30台机器的环境,使用状况还是不错的。
参考了网络文章进行安装,其中发生了很多问题,逐一解决后,形成了这篇文章,这篇文章可以知道安装ganglia,如果安装碰到问题可以留言,共同探讨。
Hadoop版本:2.7.3
ganglia主要由三部分组成,gmond,gmetad,web。
gmond可以理解成数据采集工具。主要的工作方式是:采集当前机器的数据,送到目标的gmond上(这个gmond很重要),目标gmond将数据放到内存,等待gmetad过来拉数据。
gmetad可以理解成数据收集工具。主要的工作方式是:去目标gmond拉数据,然后执行本地存储(rrds)。
过程大致理解为:
gmond(很多个)———upd发送————> 目标gmond <—–tcp拉数据——–gmetad—存储–>rrds
web主要就是将gmetad收集的数据进行展示的工具。
注意:我目前演示的配置是单播,单播方便理解,可以更好的了解ganglia的工作机制。
1:epel 源
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
这个源可能已经安装到了你的系统中,但是可能目标地址有些改变,建议删除。
删除命令
>rpm -e --nodeps epel-release-6-8.noarch
验证是否删除
>rpm -qa|grep epel
然后在执行安装
2:remi源
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
如果已经安装,按照上面的步骤删除,重新安装。
验证加入的源工作正常
清楚本地的yum缓存
>yum clean all
验证所有的yum源
>yum list
在安装的时候可能出现如下错误:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
/etc/yum.repos.d/epel.repo
如果机器没有证书会导致yum失败,这个时候需要修改https为http。如果没有报上面的错误,忽略就OK了。
修改内容,共有三个(这是其中一个):
mirrorlist=http://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
然后执行
>yum clean all
>yum list
注:这两个yum源所有的机器都需要安装,无论是gmond还是gmetad。
所有的操作都是root
共3台机器
192.168.248.130(gmetad,web,gmond-master)
192.168.248.131(gmond)
192.168.248.132(gmond)
(192.168.248.130)
1:安装php支持
>yum install php-common php-cli php-gb php
2:安装依赖库
>yum install rrdtool rrdtool-devel httpd apr-devel zlib-devel libconfuse-devel expat-devel pcre-devel
3:安装ganglia
>yum install ganglia-web ganglia-gmetad ganglia-gmond ganglia-gmond-python
安装完成后ganglia的相关文件所在的目录为一下三个路径:
/etc/ganglia/ (conf)
/usr/share/ganglia (web)
/var/lib/ganglia (rrds,dwoo)
4:配置gmetad
修改/etc/ganglia/gmetad.conf
修改data_source,改成:
data_source "MyCluster” 192.168.248.130:8650 #gmetad采集数据的目标gmond地址和端口(tcp_accept_channel)
5:配置gmond
/etc/ganglia/gmond.conf,修改以下内容(这个gmond节点作为收集节点,这个节点可以是多个,最后需要在gmetad.conf上进行配置):
cluster {
name = "MyCluster" #设置集群的名称
#owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
#发送到目标gmond的地址和端口(单播)
udp_send_channel {
host=192.168.248.130
port = 8649
ttl = 1
}
#接收udp的端口
udp_recv_channel {
port = 8649
}
#gmetad如果过来收集数据请求的端口
tcp_accept_channel {
port = 8650
gzip_output = no
}
6:配置web
做这步之前最好进行备份
>cp -R /usr/share/ganglia /usr/share/ganglia_bak
>ln -s /usr/share/ganglia /var/www/ganglia
以下这个建议是其他作者建议的,我没有碰到情况,没有进行测试。
若有问题,可以将/usr/share/ganglia的内容直接复制到/var/www/ganglia
修改/etc/httpd/conf.d/ganglia.conf,改成:
#
# Ganglia monitoring system php web frontend
#
Alias /ganglia /usr/share/ganglia
Order deny,allow
Allow from all
Allow from 127.0.0.1
Allow from ::1
# Allow from .example.com
7:关闭SELINUX
如果已经关闭,忽略以下操作
>vi /etc/selinux/config
把SELINUX=enforcing改成SELINUX=disable;
需要重启机器。
8:启动服务
目前服务器的配置已经完成,接下来需要启动服务了。
启动前需要关闭防火墙,否则数据送不上来
>service iptables stop
>service gmetad start
>service gmond start
>service httpd restart
192.168.248.131(gmond)
192.168.248.132(gmond)
添加yum源的操作和服务端一样
1:安装
>yum install ganglia-gmond
>yum install ganglia-gmond-python
2:配置gmond
/etc/ganglia/gmond.conf,修改以下内容:
cluster {
name = "MyCluster" #设置集群的名称
#owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
#发送到收集服务器和端口
udp_send_channel {
host=192.168.248.130
port = 8649
ttl = 1
}
#接收端口,可以整个注释掉
udp_recv_channel {
port = 8649
}
#这个端口也可以注释掉
tcp_accept_channel {
port = 8649
gzip_output = no
}
There was an error collecting ganglia data (127.0.0.1:8652): fsockopen error: Permission denied
>vi /etc/selinux/config
把SELINUX=enforcing改成SELINUX=disable;
需要重启机器。
>chkconfig gmond --level 3,4,5 on
>chkconfig gmetad --level 3,4,5 on
>chkconfig httpd --level 3,4,5 on
开始的时候拉不到其他机器的数据,所以我检测了一下upd端口,发现我们网络设置有问题。监控upd端口用tcpdump
>tcpdump -nn -vv -X udp port 8649
http://192.168.248.130/ganglia
修改hadoop-2.7.3/etc/hadoop/hadoop-metrics2.properties这个文件。
主要是配置各种metrics的收集地址
因为这里只有一个ganglia集群,因此配置了一个收集节点,如果是多个集群需要单独配置。
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10
# default for supportsparse is false
# *.sink.ganglia.supportsparse=true
*.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
*.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
# Tag values to use for the ganglia prefix. If not defined no tags are used.
# If '*' all tags are used. If specifiying multiple tags separate them with
# commas. Note that the last segment of the property name is the context name.
#
#*.sink.ganglia.tagsForPrefix.jvm=ProcesName
#*.sink.ganglia.tagsForPrefix.dfs=
#*.sink.ganglia.tagsForPrefix.rpc=
#*.sink.ganglia.tagsForPrefix.mapred=
namenode.sink.ganglia.servers=192.168.248.130:8649
datanode.sink.ganglia.servers=192.168.248.130:8649
resourcemanager.sink.ganglia.servers=192.168.248.130:8649
nodemanager.sink.ganglia.servers=192.168.248.130:8649
mrappmaster.sink.ganglia.servers=192.168.248.130:8649
jobhistoryserver.sink.ganglia.servers=192.168.248.130:8649
http://blog.csdn.net/knowledgeaaa/article/details/23352797
https://my.oschina.net/HIJAY/blog/497933
http://blog.csdn.net/kafeiflynn/article/details/6634380
http://blog.csdn.net/xxd851116/article/details/21369163
http://jingyan.baidu.com/article/29697b913c4a2cab20de3cd9.html
http://blog.chinaunix.net/uid-11121450-id-3147002.html
http://blog.csdn.net/cywosp/article/details/39701141
http://blog.csdn.net/xugen12/article/details/48230617
http://ramosli.iteye.com/blog/1485992