前言
HBase Metrics是一種監控信息實時收集機制。它負責收集的信息有:
- 功能性信息(Compaction Queue、Store Files個數等)
- JVM使用信息 (Heap Memory 的變化)
- rpc訪問信息
HMaster地址:
http://master_host:60010/jmx\color{green}{http://master\_host:60010/jmx}http://master_host:60010/jmx
RegionServer地址:
http://region_host:60030/jmx\color{green}{http://region\_host:60030/jmx}http://region_host:60030/jmx
通過prometheus提供的jmx_prometheus_javaagent*.jar可以捕獲hmaster與regionserver的jmx輸出數據,等待prometheus server來pull。
過程涉及到2個地方的更改:
- 客戶端(hbase)需要添加jmx export功能
- 服務端(prometheus)添加pull 的地址
配置JavaAgent
注:Hbase集群下的所有節點都要進行如下配置
-
上傳解壓
上傳jmx_prometheus_javaagent-0.12.0.jar安裝包到hbase集群$HBASE_HOME/lib/目錄下。
-
配置
上傳hbase_jmx_config.yaml到hbase集群 conf/ 目錄下
hbase_jmx_config.yaml內容:
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: HBase_$2_$3_$4 - pattern: Hadoop<service=(\w+), name=(\w+)><>(\w+) name: HBase_$2_$3
修改hbase配置文件 conf/hbase-env.sh
1. Master節點修改:
export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10101 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.12.0.jar=17000:$HBASE_HOME/conf/hbase_jmx_config.yaml" export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10102 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.12.0.jar=17001:$HBASE_HOME/conf/hbase_jmx_config.yaml"
2. 其它節點修改:
HBASE_OPTS="$HBASE_OPTS -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.12.0.jar=17002:$HBASE_HOME/conf/hbase_jmx_config.yaml"
3. 集群中每個節點的javaagent的端口不要重復
-
啟動
重啟hbase 集群,啟動成功后,可以訪問 http://10.0.101.100:17000/metrics/ ,(IP和端口要改成相應環境的)
看抓取的信息如下:
補充:在偽分布式模式下公開指標
如果每個HBase JVM在不同的主機上運行,則將javaagent附加到固定端口將起作用。 這在偽分布式模式下失敗,因為在啟動第一個HBase JVM之后才使用該端口。
為了解決這個問題,我在bin / hbase中添加了以下內容。 hbase-env.sh在啟動時僅提供一次資源,因此我在啟動JVM之前在bin / hbase中執行了此腳本。 它檢查7000-7010范圍內的第一個可用端口。
if [[ $1 == "start" ]]; then if [ "$COMMAND" = "master" ] || [ "$COMMAND" = "regionserver" ]; then for port in {7000..7010}; do if [ `ss -ltpn|grep ":$port" | wc -l` == "1" ]; then echo "Checking port $port - port $port in use" else echo "Checking port $port - port $port not in use - using port $port" HBASE_OPTS="$HBASE_OPTS -javaagent:$HBASE_HOME/conf/jmx_prometheus_javaagent-0.1.0.jar=$port:$HBASE_HOME/conf/hbase_exporter.yml" break fi done fi fi
port從7000到7010,有可能是master, 也有可能是region server 正常啟動訪問:7000/metrics得到監控數據
Prometheus配置
-
配置
修改prometheus組件的prometheus.yml加入hbase監控:
vi /usr/local/prometheus-2.15.1/prometheus.yml
-
啟動驗證
先kill掉Prometheus進程,用以下命令重啟它,然后查看targets:
cd /usr/local/prometheus-2.15.1 nohup ./prometheus --config.file=prometheus.yml &
注:State=UP,說明成功
Grafana配置
-
導入儀表盤模板
導入附件提供的模板文件(HBase-dashboard.json)
-
預警指標
序號 |
預警名稱 |
預警規則 |
描述 |
1 |
節點數預警 |
當集群中的節點數達到閾值【<3】時進行預警 |
|
2 |
死亡節點預警 |
當集群中的死亡節點數達到閾值【>0】時進行預警 |
|
3 |
Gc 耗時預警 |
當出現Gc耗時達到閾值【>0.3s】時進行預警 |
|
4 |
Gc次數預警 |
當每秒Gc次數達到閾值【>5】時進行預警 |
|