技術實踐丨Prometheus+Grafana搭建HBase監控儀表盤

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

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章