icinga2-checks/check_graylog_index_size.py

63 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import sys
import traceback
import requests
from checker import nagios
from checker.result import quit_check
def main(args):
data = {} # make pycharm happy
try:
r = requests.get('http://localhost:9200/_cat/nodes?v&h=n,ip,disk*&format=json')
r.raise_for_status()
data = r.json()[0]
except Exception as e:
quit_check(f'Failed to reach Elasticsearch: {e}', nagios.STATE_CRIT)
perfdata = {
'disk_used': {
'value': data['disk.used'],
'min': 0,
},
'disk_total': {
'value': data['disk.total'],
'min': 0,
},
'disk_avail': {
'value': data['disk.avail'],
},
'disk_used_percent': {
'value': data['disk.used_percent'],
'unit': '%'
}
}
used_percent_float = float(data['disk.used_percent'])
warn_percent = args.size_warn_percent
crit_percent = args.size_crit_percent
exit_str = f"{data['disk.used_percent']}% disk used ({data['disk.used'].upper()} / {data['disk.total'].upper()}). {data['disk.avail'].upper()} available."
exit_code = nagios.STATE_OK
if used_percent_float >= crit_percent:
exit_code = nagios.STATE_CRIT
elif used_percent_float >= warn_percent:
exit_code = nagios.STATE_WARN
quit_check(exit_str, exit_code, perfdata)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Check the Graylog index size.')
parser.add_argument('--size-warn-percent', default=50, type=float)
parser.add_argument('--size-crit-percent', default=65, type=float)
args = parser.parse_args()
try:
main(args)
except Exception as e:
print(f'UNKNOWN: exception "{e}"')
print(traceback.format_exc())
sys.exit(nagios.STATE_UNKNOWN)