摘要: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。
