zoukankan      html  css  js  c++  java
  • HBase 集群监控系统构建

    HBase 集群监控系统构建

    标签(空格分隔): Hbase


    一, 集群为什么需要监控系统

    总的来说是为了保证系统的稳定性,可靠性,可运维性。具体来说我认为有以下几点:

    掌控集群的核心性能指标,了解集群的性能表现。
    集群出现问题时及时报警,便于Hbase运维同学及时修复问题。
    集群重要指标值异常时进行预警,将问题扼杀在摇篮中,不用等集群真正不可用时才采取行动。
    当集群出现问题时,监控系统可以帮助我们更快的定位问题和解决问题。无监控,不运维。

    二, 如何构建HBase集群监控系统

    一般来说,大公司内部都有企业统一的监控报警系统,开源的有zabbix以及小米的Open-Falcon。对于HBase集群来讲,我们所要做的就是将我们关心的指标项发送到公司的监控系统,并配置相关的报警信息即可。所以问题现在转化为我们应该开发,采集并上报哪些HBase集群监控项

    三,HBase 集群监控项采集

    3.1 主机基本监控项

    CPU,内存,磁盘,网络 主机4大 基本监控项,这4项机器监控保证我们运行我们HBase集群的机器是正常的。

    3.2 JVM监控项

    HBase集群涉及的系统HDFS,HBase,ZooKeeper都是用Java编写的,系统都是运行在JVM中,所以我们必须采集JVM相关的监控项,尤其是JVM的GC信息。GC信息在整个大数据生态圈中都是极为重要的监控指标。

    3.3 HBase集群各系统存活监控项

    HBase集群各个系统的进程是否存活是必须也是最基本的监控项。具体有hmaster;regionserver;namenode;datanode;journalnode;zkfc;zookeeper的存活监控。具体判断存活的方式我们可以去判断各系统相应的进程是否存在,也可以去判断各系统的web页面或者jmx页面是否正常。

    3.4 HBase集群各系统JMX监控项

    JMX全称是Java Management Extensions,用于用于Java程序扩展监控和管理项。而许多Hadoop系统都提供了丰富的JMX监控项,所以我们可以直接从HBase系统本身提供的JMX信息获取我们需要的监控项。HBase提供的JMX信息的web页面,地址就是 http://your_hmaster:60010/jmx,JMX web页面的数据格式是json格式。由于信息比较多,也提供了一个qry=name的方式获取具体某一项所需的数据,例如:http://namenode:50070/jmx?qry=hadoop:service=NameNode,name=NameNodeInfo只收集nameinfo相关的数据。 所以我们可以用多线程或多进程同时采集多个指标项,同时也要注意在每个线程处理的时候数据应该是异步的,否则同步可能导致某一个指标项采集阻塞, 使得之后的所有指标项在一个采集周期内无法正常返回数据。

    下面是一个python利用进程池异步请求多个url的例子:

    #!/usr/bin/env python
    # encoding: utf-8
    
    import urllib2
    import multiprocessing as mp
    
    results = []
    
    def add_list(result):
        results.append(result)
    
    class PoolHelper(object):
        def __call__(self, index, url):
            return self.open_url(index, url)
    
        def open_url(self, index, url):
            try:
                response = urllib2.urlopen(url, timeout = 10)
                result = response.read()
            except:
                result = ''
            return (index, result)
    
        def pool_url(self, urls):
            pool = mp.Pool()
            for index, url in enumerate(urls):
                pool.apply_async(self, args=(index, url,), callback=add_list)
            pool.close()
            pool.join()
            return results
    

    JMX的信息我们除了可以从web页面抓取外,也可以用Java 程序直接attach到目标进程直接获取JMX信息。
    例如:

    
    

    3.5 HBase集群web页面监控项

    我们也可以从HBase的16010和16020的web页面直接抓取集群的一些汇总信息。具体实现方式可以使用正则匹配,python也可以直接使用BeautifulSoup获取页面上我们需要的信息,BeautifulSoup简单,易用,强大。

    3.6 HBase集群特有监控项

    3.6.1 HBCK监控

    关于HBCK的具体含义可以参考:

    3.6.2 HBase Replication监控

    主要是用来确定开启Replication的HBase集群都正常同步,这一块为了便于被python调用,我们使用了JRuby开发,JRuby语法和Ruby一样,只不过可以直接调用Java API。

    hbase shell>
    status 'replcation'
    

    也可以用hbase-client自带方法。

    3.6.3 HBase 探针程序

    探针程序就是为了确定整个集群状态健康,一般是建表,写数据,读数据,删数据,删表。探针监控在storm,hdfs,yarn等等组件都应该有完整的回路监控。

    3.7 HBase集群 表粒度和Region粒度指标监控

    因为HBase本身的JMX监控指标没有表粒度和Region粒度,所以我们需要二次开发。
    一。利用HBase的observer类型的协处理器来统计基于表粒度的put,get,scan等请求信息,然后发送到HBase的Metric,最后再从jmx页面抓取监控项。
    二。抓取所有Hbase regionserver metrics 然后进行汇总并写入到时序数据库。

    3.8 HBase客户端监控

    以上的监控项都是服务端的,我们也需要用户使用的HBase客户端也有监控,客户端监控也是HBase服务质量的一个体现。

  • 相关阅读:
    升级MySQL5.7.22版本_总结记录
    初探分布式环境的指挥官ZooKeeper
    利用ROS工具从bag包中提取图片和.csv文件
    安装tensorflow出现的python-setuptools 20.7.0问题
    evo 评测工具修改背景颜色和线条等参数
    Ubuntu上下载百度网盘资料
    okvis 编译出现ceres-solver错误的解决办法
    opencv各个模块功能总结
    计算两幅图的单应矩阵,实现图像拼接
    特征提取与匹配、基础矩阵、单应矩阵、极限约束
  • 原文地址:https://www.cnblogs.com/hit-zb/p/10932592.html
Copyright © 2011-2022 走看看