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