Fix logging, add some vars
This commit is contained in:
parent
e2a650e9f6
commit
0ba0005892
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python36
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# HBase Prometheus Exporter
|
# HBase Prometheus Exporter
|
||||||
#
|
#
|
||||||
|
@ -31,12 +31,6 @@ import xml.etree.ElementTree as et
|
||||||
|
|
||||||
|
|
||||||
logfile = ''
|
logfile = ''
|
||||||
loglevel = 'INFO'
|
|
||||||
|
|
||||||
rootlogger = logging.getLogger()
|
|
||||||
handler = logging.StreamHandler(sys.stdout)
|
|
||||||
handler.setLevel(logging.INFO)
|
|
||||||
rootlogger.addHandler(handler)
|
|
||||||
|
|
||||||
# Prometheus
|
# Prometheus
|
||||||
prom_http_port = 9010
|
prom_http_port = 9010
|
||||||
|
@ -51,6 +45,9 @@ 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_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_clusterrequests = Gauge('hbase_clusterrequests', 'HBase Clusterrequests')
|
||||||
|
|
||||||
# HDFS/HBase
|
# HDFS/HBase
|
||||||
hdfs_config_file = "/etc/hadoop/conf/hdfs-site.xml"
|
hdfs_config_file = "/etc/hadoop/conf/hdfs-site.xml"
|
||||||
|
@ -64,11 +61,34 @@ class jmx_query():
|
||||||
def main(self, hdfs_namenode_hosts):
|
def main(self, hdfs_namenode_hosts):
|
||||||
|
|
||||||
hdfs_active_namenode = self.get_active_namenode()
|
hdfs_active_namenode = self.get_active_namenode()
|
||||||
|
hbase_active_master = hbase_exporter.get_active_master()
|
||||||
|
|
||||||
if not hdfs_active_namenode:
|
if not hdfs_active_namenode:
|
||||||
logging.info("Failed to determine active namenode")
|
logging.info("Failed to determine active namenode")
|
||||||
|
return False
|
||||||
|
|
||||||
url = self.get_url(hdfs_active_namenode)
|
if not hbase_active_master:
|
||||||
|
logging.info("Failed to determine active HBase master")
|
||||||
|
return False
|
||||||
|
|
||||||
|
url = self.get_url('hdfs', hdfs_active_namenode)
|
||||||
|
self.get_jmx_data(url)
|
||||||
|
url = self.get_url('hbase', hbase_active_master)
|
||||||
|
self.get_jmx_data(url)
|
||||||
|
|
||||||
|
def get_url(self, service, hostname):
|
||||||
|
if (namenode_use_tls):
|
||||||
|
url_scheme = "https://"
|
||||||
|
else:
|
||||||
|
url_scheme = "http://"
|
||||||
|
|
||||||
|
if service == 'hdfs':
|
||||||
|
url = url_scheme + hostname + ":" + str(hdfs_namenode_port) + "/jmx"
|
||||||
|
elif service == 'hbase':
|
||||||
|
url = url_scheme + hostname + ":" + str(hbase_master_ui_port) + "/jmx"
|
||||||
|
return url
|
||||||
|
|
||||||
|
def get_jmx_data(self, url):
|
||||||
jmx = self.query(url)
|
jmx = self.query(url)
|
||||||
|
|
||||||
if (jmx == False):
|
if (jmx == False):
|
||||||
|
@ -79,22 +99,14 @@ class jmx_query():
|
||||||
if not v is None:
|
if not v is None:
|
||||||
self.lookup_keys(k, v)
|
self.lookup_keys(k, v)
|
||||||
|
|
||||||
def get_url(self, hostname):
|
return True
|
||||||
if (namenode_use_tls):
|
|
||||||
url_scheme = "https://"
|
|
||||||
else:
|
|
||||||
url_scheme = "http://"
|
|
||||||
|
|
||||||
url = url_scheme + hostname + ":" + str(hdfs_namenode_port) + "/jmx"
|
|
||||||
|
|
||||||
return url
|
|
||||||
|
|
||||||
def get_active_namenode(hdfs_namenode_hosts):
|
def get_active_namenode(hdfs_namenode_hosts):
|
||||||
try:
|
try:
|
||||||
r = subprocess.run(cmd_hdfs_namenodes, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
r = subprocess.run(cmd_hdfs_namenodes, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.debug("type error: " + str(e))
|
logging.debug("type error: " + str(e))
|
||||||
logging.debug("Failed to get active master")
|
logging.debug("Failed to determine active master")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
hosts = r.stdout.decode('utf-8').split(" ")
|
hosts = r.stdout.decode('utf-8').split(" ")
|
||||||
|
@ -161,16 +173,31 @@ class jmx_query():
|
||||||
elif key.endswith("NumDeadDataNodes"):
|
elif key.endswith("NumDeadDataNodes"):
|
||||||
prom_hdfs_num_datanodes_dead.set(value)
|
prom_hdfs_num_datanodes_dead.set(value)
|
||||||
logging.debug("Found jmx key: " + key)
|
logging.debug("Found jmx key: " + key)
|
||||||
|
elif key.endswith("numRegionServers"):
|
||||||
|
prom_hbase_num_regionservers_live.set(value)
|
||||||
|
logging.debug("Found jmx key: " + key)
|
||||||
|
elif key.endswith("numDeadRegionServers"):
|
||||||
|
prom_hbase_num_regionservers_dead.set(value)
|
||||||
|
logging.debug("Found jmx key: " + key)
|
||||||
|
elif key.endswith("clusterRequests"):
|
||||||
|
prom_hbase_num_clusterrequests.set(value)
|
||||||
|
logging.debug("Found jmx key: " + key)
|
||||||
|
|
||||||
|
|
||||||
class hbase_exporter():
|
class hbase_exporter():
|
||||||
|
|
||||||
def main(self, hbase_master_hosts):
|
def main(self, hbase_master_hosts):
|
||||||
hbase_active_master = self.get_active_master()
|
hbase_active_master = self.get_active_master()
|
||||||
|
|
||||||
|
if not hbase_active_master:
|
||||||
|
logging.info("Failed to determine active HBase master")
|
||||||
|
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()
|
||||||
|
|
||||||
def get_active_master(self):
|
@staticmethod
|
||||||
|
def get_active_master():
|
||||||
try:
|
try:
|
||||||
r = subprocess.run(cmd_hbase_active_master, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
r = subprocess.run(cmd_hbase_active_master, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -286,6 +313,18 @@ class hbase_exporter():
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
file_handler = logging.FileHandler(filename='tmp.log')
|
||||||
|
stdout_handler = logging.StreamHandler(sys.stdout)
|
||||||
|
handlers = [file_handler, stdout_handler]
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.DEBUG,
|
||||||
|
format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s',
|
||||||
|
handlers=handlers
|
||||||
|
)
|
||||||
|
|
||||||
|
logger = logging.getLogger('LOGGER_NAME')
|
||||||
|
|
||||||
parser = argparse.ArgumentParser( description="")
|
parser = argparse.ArgumentParser( description="")
|
||||||
parser.add_argument('--hbase-master-hosts', dest='hbase_masters', help="Comma seperated list of HBase master hosts", type=str)
|
parser.add_argument('--hbase-master-hosts', dest='hbase_masters', help="Comma seperated list of HBase master hosts", type=str)
|
||||||
parser.add_argument('--hdfs-namenode-hosts', dest='hdfs_namenodes', help="Comma seperated list of HDFS namenode hosts", type=str)
|
parser.add_argument('--hdfs-namenode-hosts', dest='hdfs_namenodes', help="Comma seperated list of HDFS namenode hosts", type=str)
|
||||||
|
@ -293,9 +332,12 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Logging
|
# Optional File Logging
|
||||||
if not logfile:
|
#if logfile:
|
||||||
logging.basicConfig(filename=logfile, level=logging.INFO)
|
#handler = logging.FileHandler(logfile)
|
||||||
|
#handler.setLevel(logging.INFO)
|
||||||
|
#log.addHandler(handler)
|
||||||
|
#logging.basicConfig(filename=logfile, level=logging.INFO)
|
||||||
|
|
||||||
# Start the Prometheus server
|
# Start the Prometheus server
|
||||||
start_http_server(prom_http_port)
|
start_http_server(prom_http_port)
|
||||||
|
|
Loading…
Reference in New Issue