今天配置了Ganglia来监控Hadoop和Hbase,这里做一下简单的记录。
ganglia主要有两个进程,它们是:gmond和gmetad。集群内的节点,通过运行gmond收集发布节点状态信息,然后gmetad周期性的轮询gmond收集到的信息,然后存入rrd数据库,通过web服务器可以对其进行查询展示。
1.首先,选择一台服务器来运行gmetad和apache服务器(主节点)。
1.1 运行如下的命令安装必要的软件。
sudo apt-get install ganglia-monitor rrdtool gmetad ganglia-webfrontend
1.2 配置/etc/ganglia/gmetad.conf文件
安装完成后,编辑/etc/ganglia/gmetad.conf文件,修改data_source,“cyber_space”是我给集群取的名字,后面跟着要监控的主机的名称。可以在主机后添加端口信息,这些规则在配置文件的注释中写的比较详细。
# data_source "my cluster" 10 localhost my.machine.edu:8649 1.2.3.5:8655
# data_source "my grid" 50 1.3.4.7:8655 grid.org:8651 grid-backup.org:8651
# data_source "another source" 1.3.4.7:8655 1.3.4.8
data_source "cyber_space" namenode
因为是单播,所以datasource配置成namenode,表示gmeta只从namenode上读取节点数据
2.配置被监控的节点(从节点)
2.1 使用如下的命令安装gmond。
sudo apt-get install ganglia-monitor
我这里也需要监控gmeta运行的节点,所以在第一步中,也安装了ganglia-monitor。
2.2 配置/etc/ganglia/gmond.conf文件
首先,需要将cluster块中的name改为我们集群的名称,如下所示:
cluster {
name = "cyber_space"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
集群中,我们使用单播模式,即所有被监控的节点,都会将信息发送到指定的ip上,所以,需要修改udp_send_channel块,将mcast_join注释,然后添加host,host的值是gmeta运行的节点,如下所示,
udp_send_channel {
/*mcast_join = 239.2.11.71 */
host = 192.168.2.160
port = 8649
ttl = 1
}
,udp_recv_channel也需要修改为如下所示,将mcast_join和bind注释。
udp_recv_channel {
/*mcast_join = 239.2.11.71 */
port = 8649
/*bind = 239.2.11.71 */
}
3. 重启各项服务
在主节点上运行如下命令重启gmeta和gmond
sudo /etc/init.d/gmetad restart
suod /etc/init.d/ganglia-monitor restart
在从节点上运行如下命令重启gmond
sudo /etc/init.d/ganglia-monitor restart
4. 建立web-frontend到apache目录下的软链接
sudo ln -s /usr/share/ganglia-webfrontend/ /var/www/html/ganglia
5. 在浏览器上打开链接:http://192.168.2.160/ganglia,就能看到下图所示的ganglia监控页面,说明ganglia已经配置成功了
6. 配置Hadoop监控
修改Hadoop的配置文件,HADOOP_HOME/etc/hadoop/hadoop-metrics2.properties,按照下面的内容对配置文件进行修改。
# for Ganglia 3.1 support
*.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=namenode:8649
datanode.sink.ganglia.servers=namenode:8649
resourcemanager.sink.ganglia.servers=namenode:8649
nodemanager.sink.ganglia.servers=namenode:8649
mrappmaster.sink.ganglia.servers=namenode:8649
这里也是因为采用单播的原因,所以把数据都发送到namenode上,由namenode的gmeta来采集这些数据
修改完后,重启ganglia的服务即可。可看到如下图所示的诸如NameNode,DataNode等信息。