2024-04-05 17:45:24 -06:00
|
|
|
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
|
|
import sys
|
|
|
|
import traceback
|
|
|
|
|
|
|
|
import mysql.connector
|
|
|
|
|
|
|
|
from checker import nagios
|
|
|
|
from checker.result import quit_check
|
|
|
|
|
|
|
|
|
|
|
|
def main(args):
|
|
|
|
try:
|
|
|
|
connection = mysql.connector.connect(host=args.host, user=args.username, password=args.password)
|
|
|
|
cursor = connection.cursor()
|
|
|
|
cursor.execute("SHOW STATUS LIKE 'Threads_connected'")
|
|
|
|
result = cursor.fetchone()
|
|
|
|
active_connections = int(result[1])
|
|
|
|
|
|
|
|
cursor.execute("SHOW VARIABLES LIKE 'max_connections'")
|
|
|
|
result = cursor.fetchone()
|
|
|
|
max_connections = int(result[1])
|
|
|
|
|
|
|
|
cursor.close()
|
|
|
|
connection.close()
|
|
|
|
|
|
|
|
except mysql.connector.Error as e:
|
|
|
|
quit_check(f'unable to connect to MySQL server: {e}', nagios.STATE_CRIT)
|
|
|
|
return # make pycharm happy
|
|
|
|
|
|
|
|
# ===================================================
|
|
|
|
# Parse data
|
|
|
|
|
|
|
|
warn_percent = args.warn_percent / 100
|
|
|
|
crit_percent = args.crit_percent / 100
|
|
|
|
active_connections_percent = active_connections / max_connections
|
|
|
|
active_connections_percent_str = str(int(active_connections_percent * 100))
|
|
|
|
|
|
|
|
if active_connections_percent > crit_percent:
|
|
|
|
exit_code = nagios.STATE_CRIT
|
|
|
|
elif active_connections_percent > warn_percent:
|
|
|
|
exit_code = nagios.STATE_WARN
|
|
|
|
else:
|
|
|
|
exit_code = nagios.STATE_OK
|
|
|
|
|
|
|
|
perfdata = {
|
|
|
|
'percent_active_connections': {
|
|
|
|
'value': active_connections_percent_str,
|
|
|
|
'min': 0,
|
|
|
|
'unit': '%',
|
|
|
|
'warn': int(warn_percent * 100),
|
|
|
|
'crit': int(crit_percent * 100)
|
|
|
|
},
|
|
|
|
'active_connections': {
|
|
|
|
'value': active_connections,
|
|
|
|
'min': 0,
|
|
|
|
'max': max_connections,
|
2024-04-05 17:53:24 -06:00
|
|
|
'warn': int(max_connections * warn_percent),
|
|
|
|
'crit': int(max_connections * crit_percent)
|
2024-04-05 17:45:24 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
text_str = f'{active_connections}/{max_connections} ({active_connections_percent_str}%) of available connections used'
|
|
|
|
quit_check(text_str, exit_code, perfdata)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
parser = argparse.ArgumentParser(description='Check MySQL connections to a server.')
|
|
|
|
parser.add_argument('--host', required=True, help='The IP of the MySQL server to connect to.')
|
2024-04-05 17:53:24 -06:00
|
|
|
parser.add_argument('--username', required=True, help='Username to connect with.')
|
|
|
|
parser.add_argument('--password', required=True, help='Password to connect with.')
|
2024-04-05 17:45:24 -06:00
|
|
|
parser.add_argument('--warn-percent', default=50, type=int, help='Connections warning percentage. Default: 50%')
|
|
|
|
parser.add_argument('--crit-percent', default=75, type=int, help='Connections critical percentage. Default: 75%')
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
try:
|
|
|
|
main(args)
|
|
|
|
except Exception as e:
|
|
|
|
print(f"UNKNOWN - {e}")
|
|
|
|
traceback.print_exc()
|
|
|
|
sys.exit(nagios.STATE_UNKNOWN)
|