Fix import, add hbase up/health vars

This commit is contained in:
Björn Busse 2019-04-12 21:44:40 +02:00
parent 6138487566
commit 408e3d8ac9

View File

@ -24,6 +24,7 @@ import random
import re import re
import requests import requests
import subprocess import subprocess
from subprocess import Popen
import sys import sys
import time import time
import traceback import traceback
@ -47,6 +48,8 @@ prom_hdfs_used = Gauge('hdfs_bytes_used', 'HDFS used bytes')
prom_hdfs_remaining = Gauge('hdfs_bytes_remaining', 'HDFS remaining bytes') prom_hdfs_remaining = Gauge('hdfs_bytes_remaining', 'HDFS remaining bytes')
prom_hdfs_num_datanodes_live = Gauge('hdfs_datanodes_live', 'HDFS Live DataNodes') prom_hdfs_num_datanodes_live = Gauge('hdfs_datanodes_live', 'HDFS Live DataNodes')
prom_hdfs_num_datanodes_dead = Gauge('hdfs_datanodes_dead', 'HDFS Dead DataNodes') prom_hdfs_num_datanodes_dead = Gauge('hdfs_datanodes_dead', 'HDFS Dead DataNodes')
prom_hbase_up = Gauge('hbase_up', 'HBase is up and running, a master is elected')
prom_hbase_healthy = Gauge('hbase_healthy', 'HBase is up and running, a master is elected, no inconsistencies are detected, hbase is queryable')
prom_hbase_num_regionservers_live = Gauge('hbase_regionservers_live', 'HBase Live Regionservers') prom_hbase_num_regionservers_live = Gauge('hbase_regionservers_live', 'HBase Live Regionservers')
prom_hbase_num_regionservers_dead = Gauge('hbase_regionservers_dead', 'HBase Dead Regionservers') prom_hbase_num_regionservers_dead = Gauge('hbase_regionservers_dead', 'HBase Dead Regionservers')
prom_hbase_num_clusterrequests = Gauge('hbase_clusterrequests', 'HBase Clusterrequests') prom_hbase_num_clusterrequests = Gauge('hbase_clusterrequests', 'HBase Clusterrequests')
@ -54,6 +57,7 @@ prom_hbase_num_clusterrequests = Gauge('hbase_clusterrequests', 'HBase Clusterre
# HDFS/HBase # HDFS/HBase
hdfs_config_file = "/etc/hadoop/conf/hdfs-site.xml" hdfs_config_file = "/etc/hadoop/conf/hdfs-site.xml"
cmd_hbase_active_master = ['/usr/hdp/current/hbase-client/bin/hbase-jruby', '/usr/hdp/current/hbase-client/bin/get-active-master.rb'] cmd_hbase_active_master = ['/usr/hdp/current/hbase-client/bin/hbase-jruby', '/usr/hdp/current/hbase-client/bin/get-active-master.rb']
cmd_hbase_hbck = ['hbase', 'hbck']
cmd_hdfs_namenodes = ['hdfs', 'getconf', '-namenodes'] cmd_hdfs_namenodes = ['hdfs', 'getconf', '-namenodes']
namenodes = "" namenodes = ""
namenode_use_tls = False namenode_use_tls = False
@ -199,10 +203,27 @@ class hbase_exporter():
if not hbase_active_master: if not hbase_active_master:
logging.info("Failed to determine active HBase master") logging.info("Failed to determine active HBase master")
prom_hbase_up.set(0)
prom_hbase_healthy.set(0)
return False return False
self.get_stale_regions_in_transition(hbase_active_master) self.get_stale_regions_in_transition(hbase_active_master)
#self.hbck_get_inconsistencies() self.hbck_get_inconsistencies()
self.check_health()
def check_health():
if self.num_inconsistencies > 0:
prom_hbase_healthy.set(0)
return False
if prom_ihbase_regions_in_transition_stale > 0:
prom_hbase_healthy.set(0)
return False
prom_hbase_up.set(1)
prom_hbase_healthy.set(1)
return True
@staticmethod @staticmethod
def get_active_master(): def get_active_master():
@ -221,6 +242,7 @@ class hbase_exporter():
if 'Master not running' in r.stdout.decode('utf-8'): if 'Master not running' in r.stdout.decode('utf-8'):
return False return False
prom_hbase_up.set(1)
return r.stdout.decode('utf-8') return r.stdout.decode('utf-8')
def get_stale_regions_in_transition(self, hbase_master): def get_stale_regions_in_transition(self, hbase_master):
@ -252,8 +274,10 @@ class hbase_exporter():
msg = '{0} regions stale in transition '\ msg = '{0} regions stale in transition '\
.format(num_regions_in_transition_stale) .format(num_regions_in_transition_stale)
prom_hbase_num_regions_in_transition_stale.set(num_regions_in_transition_stale) prom_hbase_num_regions_in_transition_stale.set(num_regions_in_transition_stale)
logging.info(msg) logging.info(msg)
return num_regions_in_transition_stale return num_regions_in_transition_stale
def hbaseui_parse_output(self, content): def hbaseui_parse_output(self, content):
@ -314,6 +338,9 @@ class hbase_exporter():
if not isinstance(num_inconsistencies, int): if not isinstance(num_inconsistencies, int):
logging.info('Error: Non-integer detected for the number of inconsistencies') logging.info('Error: Non-integer detected for the number of inconsistencies')
return False
self.num_inconsistencies = num_inconsistencies
@staticmethod @staticmethod
def hbaseui_parse_table(table): def hbaseui_parse_table(table):