目前监控hadoop集群的主要工具有ganglia,nagios,zabbix等。其中ganglia最方便,hadoop中有自带jmx接口,启用了就行,但使用默认的监控方式,监控服务器磁盘会吃不消,并产生大量数据,故需要进行过滤(支持正则表达式),能过滤大量无用信息,但效果没有想象的好,个人觉得主要原因在于ganglia默认界面太丑,重复图片过多,一个监控项有四个图,占位置,且默认使用rrd数据库,数据完整性无法保证。
使用jmxtrans+influxdb+granafa主要原因在于自由度高,按监控所需自由搭配,数据完整性得到保证,界面漂亮。
安装jdk,hbase集群。
influxdb,granafa(可参考:http://blog.csdn.net/qq_27078095/article/details/52088423)
编辑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
,可以使用json形式书写,如下是一个监控hbase部分信息的示例:
{
"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图形化展示。
界面示例:
参考文档:
https://segmentfault.com/a/1190000006630564
https://github.com/jmxtrans/jmxtrans/wiki/InfluxDBWriter
http://blog.csdn.net/qq_27078095/article/details/52837583