本文共 3457 字,大约阅读时间需要 11 分钟。
目前监控hadoop集群的主要工具有ganglia,nagios,zabbix等。其中ganglia最方便,hadoop中有自带jmx接口,启用了就行,但使用默认的监控方式,监控服务器磁盘会吃不消,并产生大量数据,故需要进行过滤(支持正则表达式),能过滤大量无用信息,但效果没有想象的好,个人觉得主要原因在于ganglia默认界面太丑,重复图片过多,一个监控项有四个图,占位置,且默认使用rrd数据库,数据完整性无法保证。
使用jmxtrans+influxdb+granafa主要原因在于自由度高,按监控所需自由搭配,数据完整性得到保证,界面漂亮。安装jdk,hbase集群。
influxdb,granafa(可参考:)编辑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"
变成
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,若想使用jmxtrans,建议先用jdk自带工具(jconsloe)进行访问:
输入ip:port进入;
如上所示,查看MBean信息,用蓝笔圈出为obj信息和用红笔圈出为属性信息,在jmxtrans中主要使用到这两样信息。在此使用rpm包安装,下载地址:http://central.maven.org/maven2/org/jmxtrans/jmxtrans/
建议:influxdb安装版本若是1.0及之后版本可下载最新的几个rpm包,若是1.0之前版本请下载259或之前版本(不要下247之类的,貌似不支持influxdb),不然会报错,错误提示为:java.lang.RuntimeException: Method Not Allowed 原因在于:
上图是influxdb的java api的一些信息。
下图为jmxtrans,最新版本更新了代码,使得不支持influxdb1.0之前的版本。# rpm -ivh jmxtrans-259.rpm
jmxtrans监控文件默认路径为/var/lib/jmxtrans
{ "servers" : [ { "port" : "jmx-port", "host" : "jmx-host", "queries" : [ { "obj" : "Hadoop:service=HBase,name=JvmMetrics", "attr" : [ "GcCount" ], "resultAlias":"GcCount", "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.1.123:8086/", "username" : "账户", "password" : "密码", "database" : "hbaseJmx" } ] }, { "obj" : "Hadoop:service=HBase,name=RegionServer,sub=Regions", "attr" : [ "numRegions" ], "resultAlias":"numRegions", "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory", "url" : "http://192.168.1.123:8086/", "username" : "账户", "password" : "密码", "database" : "hbaseJmx" } ] } ] } ] }
如上,监控了两个选项,分别是GcCount和numRegions。
jmx-host和jmx-port为需被监控的主机名和port。 obj的值就是图二中右侧的蓝笔obj信息。 attr的值就是图二中左侧的红笔属性信息。 resultAlias的值是别名,自定义。 outputWriters” : [ { “@class” : “com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory”代表使用influxdb作为数据输入数据库。 username和password为influxdb的账户和密码,默认分别为“root”,“root”。 至此启动jmxtrans;# /usr/share/jmxtrans/bin/jmxtrans start
等待片刻,在influxdb中应当会产生部分数据,即可在granafa图形化展示。
界面示例:
转: