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/目录下。
-
配置
上傳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】时进行预警 |
|