注意 由于涉及到许多组件,无论就构成系统的不同组件还是就运营规模而言,在分布式系统中运维是尤其困难的。
收集和图形指标显示的功能并不是HBase独有的,在任何一个成功的系统中都可以找到这样的功能,无论其规模大小。但是不同的系统实现的方式有所不同。本节中,我们将讨论HBase如何输出这些指标,以及用来捕获这些指标和透过这些指标了解集群性能表现的框架。我们还会讨论HBase输出的指标、其含义、以及如何使用这些指标在问题发生时告警。
提示 我们建议,甚至在采用HBase的原型阶段就应该建立起完整的指标收集、图形显示和监控体系。这可以帮助你熟悉运营HBase的各个方面,并且有利于更顺畅地过渡到生产环境。此外,当系统接受访问请求时,能够看到表示这些请求的漂亮的图形也是件有趣的事情。因为你会更加了解在应用与HBase交互时底层系统都发生了什么,所以这在应用系统的开发进程中也会有所帮助。
1
HBase如何输出指标
这种指标框架是HBase依赖于Hadoop的另一个体现。HBase与Hadoop紧密结合在一起,HBase使用Hadoop的底层指标框架来输出自己的指标信息。在编写本书的时候,HBase还在使用指标框架v1(metrics framework v1)[1]
。让HBase使用更新更好指标框架版本的工作正在进行中[2]
,但还没有完成。
除非你想涉足这些框架的开发,否则没有必要去深究指标框架的具体实现方法。如果你的目标是框架开发的话,请你务必深入了解那些代码。但如果你只是对在你的应用系统中使用HBase指标感兴趣的话,你只需要知道如何配置框架和输出指标的方法即可,这就是我们接下来要讨论的内容。
这种指标框架的工作方式是基于对MetricsContext接口的context实现来输出指标信息。你可以使用的两个预装的实现是:Ganglia context和File context。除了这两个context实现之外,HBase还可以使用Java Management Extensions(JMX)[3]
来输出指标。
2
收集和图形展示指标
指标方案涉及两部分功能:收集(collection)和图形展示(graphing)。通常这两部分功能都被内建在同一个框架下,但这并不是必须的。收集功能用来收集被监控的系统产生的指标信息,并将这些指标信息高效存储起来,以便将来可以使用。这部分功能也会按照日、月或年为单位执行汇总的工作。大多数情况下,超过一年的细粒度指标数据和同一个指标的年度汇总数据一样没有什么用处。
图形展示功能使用收集框架捕获和存储的数据,以图形和漂亮图片的形式展示出来,方便最终用户查看。运维人员查看这些图形,可以快速洞察系统的状态。通过在图形上设置阀值,你可以轻松了解系统是否运行在预期范围里。根据这些图形,当墨菲定律生效[4]
时(可能超过阈值的指标一定会超过阈值)你可以采取措施以免最终应用受到影响。
现在有很多种收集和图形展示工具可以使用。但并不是所有的工具都能够紧密集成Hadoop和HBase输出指标的方式。你的选择被限定在Ganglia(原生支持Hadoop指标框架)或者一些通过JMX收集指标信息的框架。
GANGLIA
Ganglia(http://ganglia.sourceforge.net/)[5]
是一种被设计用来监控集群的分布式监控框架。它是在加州大学伯克利分校开发的开源项目。Hadoop和HBase社区一直使用它作为监控集群的业界标准方案。
为了配置HBase把指标信息输出到Ganglia,你需要设置$HBASE_HOME/conf/目录下的hadoop-metrics.properties文件中的参数。你需要配置的内容取决于你选择使用的Ganglia版本。对于3.1以前的版本,应该使用GangliaContext。而3.1及以后的版本,应该使用GangliaContext31。对于Ganglia3.1及以后的版本,我们配置hadoop-metrics.properties文件如下所示:
hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
hbase.period=10
hbase.servers=GMETADHOST_IP:PORT
jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
jvm.period=10
jvm.servers=GMETADHOST_IP:PORT
rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
rpc.period=10
rpc.servers=GMETADHOST_IP:PORT
当你完成Ganglia的安装和配置,并且使用这些配置属性启动HBase守护进程后,Ganglia的指标列表会显示HBase输出的指标信息,如图10.1所示。
图
10.1 设置用Ganglia收集HBase的指标信息。注意下拉指标列表中的HBase和JVM指标列表。
JMX
除了使用Hadoop指标框架输出指标信息之外,HBase也可以通过JMX输出指标信息。一些开源工具,例如Cacti和OpenTSDB,可以通过JMX收集指标信息。JMX指标信息也可以透过Master和RegionServer的web用户界面以JSON格式查看:
http://master_ip_address:port/jmx
■ 某个特定RegionServer的JMX 指标信息:
http://region_server_ip _address:port/jmx
Master的默认端口是60010,RegionServer的默认端口是60030.
基于文件
HBase还可以被设置把指标信息输出到平面文件里。指标信息自动添加到文件末尾。基于context实现的不同,添加的指标信息可以带或者不带时间戳。因为基于文件的指标信息以后难以使用,所以这不是一个令人满意的记录指标的方法。虽然我们没有遇到过把指标信息记录到文件里进行动态监控的产品,但这仍然是记录指标信息供将来分析的一种选择。
为了把指标信息记录到文件里,hadoop-metrics.properties文件的配置内容如下所示:
hbase.class=org.apache.hadoop.hbase.metrics.file.TimeStampingFileContext
hbase.period=10
hbase.fileName=/tmp/metrics_hbase.log
jvm.class=org.apache.hadoop.hbase.metrics.file.TimeStampingFileContext
jvm.period=10
jvm.fileName=/tmp/metrics_jvm.log
rpc.class=org.apache.hadoop.hbase.metrics.file.TimeStampingFileContext
rpc.period=10
rpc.fileName=/tmp/metrics_rpc.log
让我们看看HBase输出的这些指标,你可以利用它们来洞察集群的健康状况和性能。
[1] Hadoop指标框架v1,Apache Software Foundation,http://mng.bz/J92f。
[2] Hadoop指标框架v2,Apache Software Foundation,http://mng.bz/aOEI。
[3] Qusay H. Mahmoud, “Getting Started with Java Management Extensions
(JMX): Developing Management and Monitoring Solutions,” Oracle Sun Developer Network, January 6, 2004,
http://mng.bz/619L。
[4] 你一定听说过墨菲定律:
http://en.wikipedia.org/wiki/Murphy’s_law。
[5]
Monitoring with Ganglia,Matt Massie等编写,预计2012年11月发行,全面介绍了监控和Ganglia。参见http://mng.bz/Pzw8。