Prometheus + Grafana(十一)系统监控之HBase - 曹伟雄

时间:2024-03-06 22:09:45

Prometheus + Grafana(十一)系统监控之HBase

 

前言

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/目录下。

下载地址:https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar

  • 配置

上傳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】时进行预警