写点什么

技术实践丨 Prometheus+Grafana 搭建 HBase 监控仪表盘

发布于: 2021 年 03 月 22 日

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


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

简介


● 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.log2>&1 &


进程关闭方法:

第一种,找到进程号, 执行 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/datatemp_data_lifetime = 24hlogs = /opt/kernel/grafana-7.1.5/logsplugins = /opt/kernel/grafana-7.1.5/pluginsprovisioning = conf/provisioning
[database]type = mysqlhost = localhost:3306name = grafanauser = rootpassword = 123456url = mysql://root:123456@localhost:3306/grafana
复制代码


启动:

进入 grafana/bin 目录

直接启动:./grafana-server

后台启动: nohup ./grafana-server >/dev/null 2>&1 &


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: truelowercaseOutputLabelNames: truerules:
- 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: .+
复制代码


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



三、配置 prometheus 和 grafana

1.prometheus 上配置 Job


在 prometheus/prometheus.yml 中增加一个 job,来指定 HBase 的集群的 JMXexporter, 在 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->Adddata 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


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


发布于: 2021 年 03 月 22 日阅读数: 28
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
技术实践丨Prometheus+Grafana搭建HBase监控仪表盘