Go to file
2020-07-14 16:18:52 +02:00
hbase-protobuf-python Change protobuf bindings directory name 2020-07-01 18:53:36 +02:00
.gitignore Change protobuf bindings directory name 2020-07-01 18:53:36 +02:00
Dockerfile Initial commit 2019-04-04 15:37:54 +02:00
env-hbase-exporter.j2 systemd: Fix zookeeper env var 2020-07-01 21:43:22 +02:00
hbase-exporter Rename write file in call 2020-07-01 21:48:39 +02:00
hbase-exporter.service systemd: Fix zookeeper env var 2020-07-01 21:43:22 +02:00
hbase-hbck.service systemd-service: Move user to the right section, change type to lowercase 2019-04-10 12:22:53 +02:00
hbase-hbck.timer hbase-hbck: Change timer to 20 minutes 2019-04-10 21:04:46 +02:00
hbase-write Rename write file 2020-07-01 21:47:29 +02:00
Makefile Makefile: Change protobuf bindings directory name 2020-07-01 18:41:59 +02:00
README.md Update README 2020-07-14 16:18:52 +02:00
requirements.txt Update requirements 2020-06-25 00:58:50 +02:00

hbase-exporter

An HBase Prometheus Exporter

Collects metrics and relays JMX metrics for consumption by Prometheus

Since some important metrics are missing or empty in JMX, we additionally parse the HBase Master UI for e.g. 'Stale regions in transition'

The output of the 'hbase hbck' command is parsed to check for inconsistencies in HBase

Marking Hbase unhealthy requires one of the following conditions to be true

  • There is at least one stale region in transition
  • The 'hbase hbck' command shows HBase inconsistencies
  • A write to the predefined table does not succeed
  • A ZooKeeper leader can not be determined

Dependencies

For python module requirements see requirements.txt

$ sudo dnf/pkg install python36

As the user executing the exporter:

$ pip3[.6] install --user -r requirements.txt

The protobuf compiler is necessary to build the required bindings for Python

Install the protobuf compiler

$ sudo dnf/pkg install protobuf-c protobuf-devel

Build

To generate the necessary HBase Python Protobuf bindings, run make

$ make

Run

The exporter needs to know about the ZooKeeper servers to connect to, so start the exporter with e.g.

$ hbase-exporter --zookeeper-server-address=zk-1.acme.internal
                 --zookeeper-server-address=zk-2.acme.internal
                 --zookeeper-server-address=zk-3.acme.internal
                 --export-refresh-rate=60
                 --hbck-refresh-rate=1200

Run 'hbase-exporter --help' for all arguments

$ hbase-exporter --help
usage: hbase-exporter [-h] [--hbase-master HBASE_MASTER]
                      [--hdfs-namenode HDFS_NAMENODE]
                      --zookeeper-server-address ZK_SERVER
                      [--zookeeper-use-tls ZK_USE_TLS]
                      [--exporter-port PROM_HTTP_PORT]
                      [--export-refresh-rate PROM_EXPORT_INTERVAL_S]
                      [--hbck-refresh-rate HBASE_HBCK_INTERVAL_S]
                      [--relay-jmx RELAY_JMX] [--logfile LOGFILE]
                      [--loglevel LOGLEVEL]

optional arguments:
  -h, --help            show this help message and exit
  --hbase-master HBASE_MASTER
                        HBase master address, can be specified multiple times
  --hdfs-namenode HDFS_NAMENODE
                        HDFS namenode address, can be specified multiple times
  --zookeeper-server-address ZK_SERVER
                        ZooKeeper server address, can be specified multiple
                        times
  --zookeeper-use-tls ZK_USE_TLS
                        Use TLS when connecting to ZooKeeper
  --exporter-port PROM_HTTP_PORT
                        Listen port for Prometheus export
  --export-refresh-rate PROM_EXPORT_INTERVAL_S
                        Time between metrics are gathered in seconds
  --hbck-refresh-rate HBASE_HBCK_INTERVAL_S
                        Minimum time between two consecutive hbck runs in
                        seconds
  --relay-jmx RELAY_JMX
                        Relay complete JMX data
  --logfile LOGFILE     Path to optional logfile
  --loglevel LOGLEVEL   Loglevel, default: INFO

Deploy

Ansible can be used to build and deploy the hbase-exporter

$ ansible-playbook -v -i inventory/env.yml deploy-hbase-exporter.yml -l host

Debug

To see the log

$ sudo journalctl -afn100 -uhbase-exporter

Issues

Import paths do not work in generated protobufs when used from a subdir
https://github.com/protocolbuffers/protobuf/issues/1491
The solution used here is mentioned in the comments:
https://github.com/protocolbuffers/protobuf/issues/1491#issuecomment-547504972
Unfortunately querying the active namenode requires superuser privileges