ganglia收集hbase的metrics

标签: ganglia hbase metrics | 发表时间:2014-07-25 23:03 | 作者:K_James
出处:http://blog.csdn.net

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


Ganglia监控软件主要是用来监控系统性能的软件,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。


hadoop和hbase很好地支持了ganglia这个开源监控工具,说明ganglia是hadoop生态中不可或缺的一部分。


本文介绍如果用ganglia收集hbase的各种指标,重点解决两个大家比较关注的问题:

(1) hbase指标过多,如何过滤? 

(2) 修改hadoop-metrics.properties 后,能否不用重启hadoop或hbase。


一、hbase  metrics 配置

        以 hbase-0.98为例,需要配置 hadoop-metrics2-hbase.properties


       

# syntax: [prefix].[source|sink].[instance].[options]
# See javadoc of package-info.java for org.apache.hadoop.metrics2 for details

#*.sink.file*.class=org.apache.hadoop.metrics2.sink.FileSink
default sampling period
*.period=10

# Below are some examples of sinks that could be used
# to monitor different hbase daemons.

# hbase.sink.file-all.class=org.apache.hadoop.metrics2.sink.FileSink
# hbase.sink.file-all.filename=all.metrics

# hbase.sink.file0.class=org.apache.hadoop.metrics2.sink.FileSink
# hbase.sink.file0.context=hmaster
# hbase.sink.file0.filename=master.metrics

# hbase.sink.file1.class=org.apache.hadoop.metrics2.sink.FileSink
# hbase.sink.file1.context=thrift-one
# hbase.sink.file1.filename=thrift-one.metrics

# hbase.sink.file2.class=org.apache.hadoop.metrics2.sink.FileSink
# hbase.sink.file2.context=thrift-two
# hbase.sink.file2.filename=thrift-one.metrics

# hbase.sink.file3.class=org.apache.hadoop.metrics2.sink.FileSink
# hbase.sink.file3.context=rest
# hbase.sink.file3.filename=rest.metrics

*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31  
*.sink.ganglia.period=10  

hbase.sink.ganglia.period=10  
hbase.sink.ganglia.servers=172.18.144.198:8648


ganglia 3.1及以上版本需要用这个类:org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31


重启hbase和gmod 就可以在ganglia  web界面上看到众多指标出来了。但是,指标太多了, 到region级别的了,每个 region属于哪个 table,每个table又一堆指标。从ganglia的rrd数据库中可以看到:

-rw-rw-rw- 1 hadoop root 12216 Jul 23 16:40 regionserver.Regions.Namespace_default_table_o_m_ocs_ordersplitamount_region_f15998ced89264146b3ec3888db625f6_metric_scanNext_max.rrd
-rw-rw-rw- 1 hadoop root 12216 Jul 23 16:40 regionserver.Regions.Namespace_default_table_o_m_forest_maps_region_cb5490455403d92ff2e6acd17c2b3877_metric_get_95th_percentile.rrd
-rw-rw-rw- 1 hadoop root 12216 Jul 23 16:40 regionserver.Regions.namespace_default_table_o_s_peking_orders_region_bc87e3d9b61ee8c14956914d407ad11c_metric_mutateCount.rrd
-rw-rw-rw- 1 hadoop root 12216 Jul 23 16:40 regionserver.Regions.namespace_default_table_o_m_ocs_ordersplitamount_region_5ca4ba7d83369781b41c939d260fdcdd_metric_mutateCount.rrd
-rw-rw-rw- 1 hadoop root 12216 Jul 23 16:40 regionserver.Regions.namespace_default_table_o_m_ocs_orderamount_region_3ecd8c8440eae5a1191ef9e6e523ea9f_metric_appendCount.rrd
-rw-rw-rw- 1 hadoop root 12216 Jul 23 16:40 regionserver.Regions.Namespace_default_table_o_m_ocs_orderamount20140722_region_985afc00551d4fb68ceaf9188f5b9d12_metric_get_75th_percentile.rrd
-rw-rw-rw- 1 hadoop root 12216 Jul 23 16:40 regionserver.Regions.namespace_default_table_o_m_ocs_orderamount20140722_region_9672e9b9ea759fc1aee838e4ae228fa9_metric_memStoreSize.rrd
-rw-rw-rw- 1 hadoop root 12216 Jul 23 16:40 regionserver.Regions.Namespace_default_table_o_m_chat_analysis_session20140722_region_d709618a5b60e44a03befe57ca480ef9_metric_get_num_ops.rrd



http://hbase.apache.org/book/hbase_metrics.html    这个上面提到一个warning to ganglia user:



Warning to Ganglia Users: by default, HBase will emit a LOT of metrics per RegionServer which may swamp your installation. Options include either increasing Ganglia server capacity, or configuring HBase to emit fewer metrics.


hbase 默认会吐那么多指标出来,我们得想办法过滤,保留我们需要的指标就行。下面说明如何过滤


二、指标过滤

 很幸运hadoop metrics system提供了过滤功能, hbase的指标监控计划:

(1) master:  去除Assignment,Balancer, Filtersystem.MetaHlog ,以及各percentile、max、median、min,保留mean平均值

(2) regionserver:去除WAL相关,以及各percentile、max、median、min,保留mean平均值

(3) region:太多,表级别的,全部去除。


*.source.filter.class=org.apache.hadoop.metrics2.filter.RegexFilter
#*.source.filter.class=org.apache.hadoop.metrics2.filter.GlobFilter
*.record.filter.class=${*.source.filter.class}
*.metric.filter.class=${*.source.filter.class}
*.period=10

*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31  
*.sink.ganglia.period=10  


hbase.sink.ganglia.metric.filter.exclude=^(.*table.*)|(\\w+metric)|(\\w+region\\w+)|(Balancer\\w+)|(\\w+Assign\\w+)|(\\w+percentile)|(\\w+max)|(\\w+median)|(\\w+min)|(MetaHlog\\w+)|(\\w+WAL\\w+)$
hbase.sink.ganglia.period=10  
hbase.sink.ganglia.servers=<span style="font-family: Arial, Helvetica, sans-serif;">172.18.144.198</span><span style="font-family: Arial, Helvetica, sans-serif;">:8648</span>


用正则表达式的Filter。修改之后,重启 hbase和gmod,在ganglia web console  上就可以看到指标少了,清爽了很多,更有针对性了。

三、hadoop metrics system 管理 


注意到前两步的修改配置的操作后,都需要重启hbase才生效,因为metric system 是随着hbase 的启动而启动的。如果hbase已经在线服务了,暴力stop会影响服务,graceful_stop则会涉及到数据的临时迁移,都不理想,最好是不重启。

下面讲到如何单独管理hadoop metrics system的启动和停止。

 hadoop 生态是人多力量大,这个也考虑到了,metrics system 子系统向外暴露了 Mbean,利用 JMX就可以对它进行控制。首先我们要开启 JMX。

 hbase-env.sh

 
export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10101"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10102"
export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10103"
export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10104"
export HBASE_REST_OPTS="$HBASE_REST_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10105"

 这一步没办法,要重启hbase。其实一开始就可以只开启JMX,重启一次。后面的 metrics配置都可以单独来启动和停止的。

 



通过  Jconsole可以看到,MetricsSystem提供了四个操作,我们需要的是start和stop。测试环境或许可以用jconsole或其它工具去连,但是生产环境就不行了。想想我们的hadoop集群是用ganglia和nagios结合使用的,ganglia收集数据,图表展现,nagios 收集数据,监控报警,这简直绝配。如果将jmx的功能集成到nagios中就更好了。

查了下,nagios的确有jmx插件,但是nagios就是个check再报警的机制,没有操作的行为。 不好将metric system的启动和停止放在nagios中。只能另起一炉灶,用JMXToolkit 和 shell脚本搞定。


JMXToolkit 比较简单,网上资料很多,在使用过程中有一些要注意的地方。


git clone https://github.com/larsgeorge/jmxtoolkit.git
cd jmxtoolkit
vim  build.xml  # 修改hbase版本为 0.98.1-hadoop2
ant

ant编译后生成 build/hbase-0.98.1-hadoop2-jmxtoolkit.jar  ,这个jar是我们最终想要的。再看配置文件,build/conf/hbase-0.98.1-hadoop2-jmx.properties

不知道jmxtoolkit内部实现是怎么样的,这里面的指标名称都不对,也不全。而且我们只是需要操作metrics system,将这个文件自己编辑了下:


[hbaseMetricsSystem]
@object=Hadoop:service=HBase,name=MetricsSystem,sub=Control
@url=service:jmx:rmi:///jndi/rmi://${HOSTNAME}:${PORT}/jmxrmi
@user=${USER|controlRole}
@password=${PASSWORD|password}
*stop=VOID
*start=VOID

重命名 build/hbase-0.98-metrics.properties

注意 object 就是上面jconsole截图中的metrics system的 objectName,而 *stop和*start则是 Mbean 提供的方法。


测试:

java -cp hbase-0.98.1-hadoop2-jmxtoolkit.jar   org.apache.hadoop.hbase.jmxtoolkit.JMXToolkit -f hbase-0.98-metrics.properties  -o hbaseMetricsSystem -q stop

/etc/init.d/gmond restart

可以看到修改的指标生效了。


最后,写个简单的shell,扔到生产环境上去。

#!/bin/bash


# manage the metrics system of hbase individually.
# ./hbase-metrics-system.sh start
# ./hbase-metrics-system.sh stop

config_file_template=hbase-0.98-metrics.properties
config_file_product=hbase-0.98-metrics-product.properties

#for i in ${hbase_hostnames=[@]};do
for i in `cat $HBASE_HOME/conf/regionservers`;do
  cp ${config_file_template} ${config_file_product}
  sed -i "s/\${HOSTNAME}/$i/g" ${config_file_product}
  sed -i "s/\${PORT}/10102/g" ${config_file_product}
  java -cp hbase-0.98.1-hadoop2-jmxtoolkit.jar   org.apache.hadoop.hbase.jmxtoolkit.JMXToolkit -f ${config_file_product}  -o hbaseMetricsSystem -q $1
  echo "$1 metrics system of $i"
  /bin/rm ${config_file_product}
done

  echo "done"

办法有点简陋,先解决了再说。








作者:K_James 发表于2014-7-25 15:03:09 原文链接
阅读:43 评论:0 查看评论

相关 [ganglia hbase metrics] 推荐:

ganglia收集hbase的metrics

- - CSDN博客云计算推荐文章
Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点. 每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程. 它将从操作系统和指定主机中收集. 接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中.

HBase Metrics机制、架构

- - 开源软件 - ITeye博客
HBase Metrics是一种监控信息实时收集机制. 功能性信息(Compaction Queue、Store Files个数等). JVM使用信息 (Heap Memory 的变化). 借助与Hadoop Metrics同样的方式,向Ganglia汇报. Ganglia的架构图:. Ganglia相关特性:.

SpringBoot-Metrics监控

- -
Metrics基本上是成熟公司里面必须做的一件事情,简单点来说就是对应用的监控,之前在一些技术不成熟的公司其实是不了解这种概念,因为业务跟技术是相关的. 当业务庞大起来,技术也会相对复杂起来,对这些复杂的系统进行监控就存在必要性了,特别是在soa化的系统中,完整一个软件的功能分布在各个系统中,针对这些功能进行监控就更必要了.

nagios+Ganglia安装备忘录

- - DBA Blog
vi /etc/ld.so.conf.d/libconfuse.conf,添加:/usr/local/lib,然后/sbin/ldconfig -v. Ganglia web前端的安装:. Ganglia的Wiki特别指出,web前端的运行需要rrdtool,以及gmetad中的rrds/目录,没有这两个东西,无法出图.

Hadoop配置Ganglia指南

- - CSDN博客云计算推荐文章
编辑/etc/ganglia/gmond.conf.                        # This option tells gmond to use a source address.                        # this, the metrics may appear to come from any.

从Ganglia故障说起

- - 开源小站
ganglia是现在市面上比较流行的一个集群健康状态监控系统. 它能够提供一整套的图形化报表用以完整的监控集群中各个节点的CPU/内存/网络以及其他需要监控的信息. 这次呢是我们搭建的一套环境,通过ganglia监控,但看似所有的配置都正确,可ganglia的前端主机(web-front)始终无法得到应有的数据.

Hadoop Metrics体系分析之三:构建自己的Metrics

- - Taobao QA Team
大型分布式系统中需要metrics来了解系统状态已成为系统必需的功能之一. 其实测试系统甚至测试用例中也同样需要metrics. 通过这些指标我们可以了解测试的进度、状况、以及一些过程情况,比如性能指标和一些无法用是否判断数据. 下面我们就用一个简单的例子来看看如何使用hadoop metrics.

Ganglia:分布式监控系统

- - CSDN博客移动开发推荐文章
1         环境安装配置. 1.1      依赖软件下载. Ganglia是伯克利开发的一个集群监控软件. 可以监视和显示集群中的节点的各种状态信息,比如如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈现. 而ganglia又依赖于一个web服务器用来显示集群状态,用rrdtool来存储数据和生成曲线图,需要xml解析因此需要expat,配置文件解析需要libconfuse.

Eclipse:使用Metrics 测量复杂度

- - CSDN博客推荐文章
Metrics可以进行许多有用的代码度量,包括圈复杂度度量,它用于测量方法中惟一路径的数目. 在Eclipse中安装和使用Metrics步骤 . Elipse中安装Metrics插件 . 打开Help->Install new Software,点击Add,添加Repository. 选择相应的版本插件,继续随后的安装 .

Hadoop Metrics体系架构分析

- - 非技术 - ITeye博客
原文: http://blog.csdn.net/chenpingbupt/article/details/7957396. 本文基于Hadoop 0.20.XX版本分析,和现在的Metrics2稍有不同. Hadoop Metrics用来统计集群运行数据,比如接口调用次数,响应时间,队列长度等等,现阶段(0.19版本)支持为数不多的几个层级的数据,分别是dfs,jvm,rpc,mepred等.