zoukankan      html  css  js  c++  java
  • 技术实践丨Prometheus+Grafana搭建HBase监控仪表盘

    摘要:Grafana+Prometheus是目前非常流行的监控方案,图形化展示非常强大。

    简介

    ● HBase是一个分布式的、面向列的开源数据库,开源版本默认提供了展示集群信息的UI,可以显示集群的实时信息,包括jmx,但是维护HBase只靠实时信息还不够,我们还需要将实时信息汇总起来变成监控图表,这样才能分析集群的运行状态,监控集群并及时发布告警。
    ● Prometheus 是一个开源的服务监控告警解决方案,同时它自身是一个时间序列数据库,通过收集集群的jmx信息并以时序格式存储起来。
    ● Grafana是一个开源的数据可视化工具,可以用做监控来展示时序数据并进行统计,并且带有告警的功能,它的官网网站和社区提供了许多主流数据库的Dashboard模板,这些模板都是制作好的一些常用的监控指标,初次使用可以先直接引用。
    ● 下图展示了这个监控系统的结构

    一、搭建准备

    ● 需要准备如下软件

    ● HBase集群准备

    这次的监控搭建,因为只作为展示用途,所以HBase使用伪分布式搭建方式在同一个虚拟机上部署了1个Master和2个Region Server,为保证在同一个虚拟机中端口不冲突,两个RS进程的对外端口都设置成不一样。

    二、进程安装

    1. prometheus的安装

    下载prometheus,https://prometheus.io/download/,获得prometheus-2.25.2.linux-amd64.tar.gz

    在虚拟机上解压后,进入prometheus目录,配置使用默认。

    启动:

    • 直接启动:./prometheus --config.file=prometheus.yml
    • 后台启动:nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &

    启动后,可以访问http://localhost:9090/graph, 进入prometheus的UI页面,可以看到它的一些信息。

    进程关闭方法:

    ​ 第一种,找到进程号, 执行 kill -TERM <PID>

    ​ 第二种,curl -X POST http://localhost:9090/-/quit , 具体地址根据实际

    2. mysql的准备

    Grafana需要用一个数据库,本文使用MySQL作为数据库,这里的安装就不介绍了,可以在网上搜索相关的安装指导,或者使用已有的数据库。

    需要为Grafana创建一个库

    CREATE DATABASE grafana DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    3. Grafana的安装

    下载Grafana,https://grafana.com/grafana/download,获得grafana-7.1.5.linux-amd64.tar.gz

    在虚拟机上解压后,进入grafana/conf目录,新建文件custom.ini,该配置文件配置了依赖的database和grafana文件,日志等路径。 下面作为参考,实际路径根据自己的环境来配置

    [paths]
    data = /opt/kernel/grafana-7.1.5/data
    temp_data_lifetime = 24h
    logs = /opt/kernel/grafana-7.1.5/logs
    plugins = /opt/kernel/grafana-7.1.5/plugins
    provisioning = conf/provisioning
    
    [database]
    type = mysql
    host = localhost:3306
    name = grafana
    user = root
    password = 123456
    url = mysql://root:123456@localhost:3306/grafana

    启动:

    • ​ 进入grafana/bin目录
    • ​ 直接启动:./grafana-server
    • ​ 后台启动: nohup ./grafana-server >/dev/null 2>&1 &

    初次启动时,会自动去数据库创建grafana相关的表。启动完成后访问http://localhost:3000,端口是3000,默认的账号密码是:admin/admin

    4. JMX exporter的安装

    (1)下载jmx_prometheus_javaagent-0.15.0.jar,https://mvnrepository.com/artifact/io.prometheus.jmx/jmx_prometheus_javaagent/0.15.0

    将jmx_prometheus_javaagent-0.15.0.jar放入HBase的进程启动的lib目录下

    (2)设置HBase的进程启动参数,这里是为了加上JMX exporter的agent,需要所有实例的conf/hbase-env.sh中设置,由于是伪分布式部署,所有进程都在一台服务器上,所以其中的一些端口号都设置为了不一样,如果是分布式部署,端口号可以设置固定。

    export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

    其中HMaster的conf/hbase-env.sh中设置

    export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=20101 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.15.0.jar=27000:$HBASE_HOME/conf/hbase_jmx_config.yaml"

    在RegionServer1的conf/hbase-env.sh中设置

    export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=20102 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.15.0.jar=27001:$HBASE_HOME/conf/hbase_jmx_config.yaml"

    在RegionServer2的conf/hbase-env.sh中设置

    export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=20103 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.15.0.jar=27002:$HBASE_HOME/conf/hbase_jmx_config.yaml"

    设置完后,Master的jmx agent端口是27000,RS1是27001,RS2的端口是27002

    (3)配置hbase_jmx_config.yaml

    在hbase/conf目录下创建hbase_jmx_config.yaml,写入配置内容,提取指定的jmx指标

    ---
    lowercaseOutputName: true
    lowercaseOutputLabelNames: true
    rules:
    
    - pattern: Hadoop<service=HBase, name=RegionServer, sub=Regions><>Namespace_([^W_]+)_table_([^W_]+)_region_([^W_]+)_metric_(w+)
      name: HBase_metric_$4
      labels:
        namespace: "$1"
        table: "$2"
        region: "$3"
    - pattern: Hadoop<service=(w+), name=(w+), sub=(w+)><>([w._]+)
      name: hadoop_$1_$4
      labels:
        "name": "$2"
        "sub": "$3"
    - pattern: .+

    (4)启动HBase进程,启动后可以根据jmx agent的IP和端口访问metrics的url来判断是否生效,例如curl http://localhost:27000/metrics,

    三、配置prometheus和grafana

    1. prometheus上配置Job

    在prometheus/prometheus.yml中增加一个job,来指定HBase的集群的JMX exporter, 在scrape_configs下增加如下配置

    - job_name: 'dist-hbase'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    
    static_configs:
    - targets: ['localhost:27000','localhost:27001','localhost:27002']

    可以重启prometheus生效,也可以使用prometheus 的reload功能来激活

    方法1:send SIGHUP signal

    kill -HUP <pid>

    方法2:send a HTTP POST to the Prometheus web server

    用这种方式需要开启web.enable-lifecycle配置参数
    /prometheus --config.file=prometheus.yml --web.enable-lifecycle
    发送reload命令来加载
    curl -X POST http://localhost:9090/-/reload

    生效后,通过查看prometheus UI上的target可以确认是否有收集成功,State为UP即为成功

    2. grafana上配置datasource

    进入grafana的UI,点击Configuration->DataSource->Add data source,添加Prometheus

    配置Prometheus的地址,保存

    3. Grafana上配置Dashboard

    下载模板,https://grafana.com/grafana/dashboards/12722/revisions,得到"hbase-1-x_rev1.json"文件

    点击Dashboards-Manage->Import,导入下载的"hbase-1-x_rev1.json"文件内容

    在后一个选项中,输入新建仪表盘的名字,以及选择数据来源Prometheus,导入后监控仪表盘就生成了

    仪表盘展示

    本文参考资料:
    https://godatadriven.com/blog/monitoring-hbase-with-prometheus/
    https://www.cnblogs.com/caoweixiong/p/12111035.html
    https://www.cnblogs.com/caoweixiong/p/12111243.html
    https://www.cnblogs.com/caoweixiong/p/12736710.html

    本文分享自华为云社区《Prometheus+Grafana搭建HBase监控仪表盘》,原文作者:Lettle whale。

    点击关注,第一时间了解华为云新鲜技术~

  • 相关阅读:
    Java 抽象类
    7.队列的链表实现
    6.队列的数组实现
    5.栈的链表实现
    4.栈的数组实现
    3.线性表-cursor
    2.线性表-Linked list
    1.线性表-Array
    hello world!
    boost 大小端转换
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/14565455.html
Copyright © 2011-2022 走看看