ganglia收集hbase的metrics

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"

辦法有點簡陋,先解決了再說。




http://itindex.net/detail/50501-ganglia-hbase-metrics

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章