forked from HariSekhon/Nagios-Plugins
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck_hbase_balancer_enabled2.py
executable file
·103 lines (83 loc) · 2.95 KB
/
check_hbase_balancer_enabled2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/env python
# coding=utf-8
# vim:ts=4:sts=4:sw=4:et
#
# Author: Hari Sekhon
# Date: 2018-07-09 19:54:57 +0100 (Mon, 09 Jul 2018)
#
# https://github.com/harisekhon/nagios-plugins
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn
# and optionally send me feedback to help steer this or other code I publish
#
# https://www.linkedin.com/in/harisekhon
#
"""
Nagios Plugin to check the HBase Balancer is enabled by parsing the HMaster JSP UI
Raises warning if the HBase Balancer isn't enabled
This has to parse the HMaster UI html tags for the warning, so this is brittle and
could break if there is an upstream change
Would prefer to get this out of the JMX but the info isn't available, see:
https://issues.apache.org/jira/browse/HBASE-20857
Requires HBase versions > 1.0 as older versions don't report the balancer being disabled in the UI
Tested on HBase 1.1, 1.2, 1.3, 1.4, 2.0, 2.1
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import logging
import os
import re
import sys
import traceback
try:
from bs4 import BeautifulSoup
except ImportError:
print(traceback.format_exc(), end='')
sys.exit(4)
srcdir = os.path.abspath(os.path.dirname(__file__))
libdir = os.path.join(srcdir, 'pylib')
sys.path.append(libdir)
try:
# pylint: disable=wrong-import-position
from harisekhon.utils import log
from harisekhon import RestNagiosPlugin
except ImportError as _:
print(traceback.format_exc(), end='')
sys.exit(4)
__author__ = 'Hari Sekhon'
__version__ = '0.2'
class CheckHBaseBalancerEnabled(RestNagiosPlugin):
def __init__(self):
# Python 2.x
super(CheckHBaseBalancerEnabled, self).__init__()
# Python 3.x
# super().__init__()
self.name = ['HBase Master', 'HBase']
self.default_port = 16010
self.path = '/master-status'
self.auth = False
self.json = False
self.msg = 'HBase Balancer not defined yet'
def add_options(self):
super(CheckHBaseBalancerEnabled, self).add_options()
def process_options(self):
super(CheckHBaseBalancerEnabled, self).process_options()
def parse(self, req):
soup = BeautifulSoup(req.content, 'html.parser')
if log.isEnabledFor(logging.DEBUG):
log.debug("BeautifulSoup prettified:\n{0}\n{1}".format(soup.prettify(), '='*80))
link = soup.find('div', {'class': 'alert alert-warning'}, text=re.compile('balancer', re.I))
if link is None:
self.ok()
self.msg = 'HBase balancer is enabled'
else:
self.warning()
text = link.get_text()
text = ' '.join([_.strip() for _ in text.split('\n')])
self.msg = 'HBase balancer is not enabled! {}'.format(text)
if __name__ == '__main__':
CheckHBaseBalancerEnabled().main()