Skip to content

Instantly share code, notes, and snippets.

@kchristensen
Last active August 29, 2015 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kchristensen/4ac154f4a0ebf0805728 to your computer and use it in GitHub Desktop.
Save kchristensen/4ac154f4a0ebf0805728 to your computer and use it in GitHub Desktop.
Nagios check for Rabbit cluster partitioning
#!/usr/bin/env python
"""
Nagios check to check RabbitMQ cluster for partitioning (split-brain)
"""
import json
import optparse
import logging
import requests
import sys
OK = 0
WARNING = 1
CRITICAL = 2
UNKNOWN = 3
LOGGER = logging.getLogger(__name__)
LOGGER.addHandler(logging.StreamHandler(sys.stdout))
LOGGER.setLevel(logging.INFO)
parse = optparse.OptionParser()
parse.add_option('-s', '--server', type='string', dest='rmq_server',
help='RabbitMQ hostname')
parse.add_option('-u', '--user', type='string', dest='rmq_user',
help='RabbitMQ username', default='guest')
parse.add_option('-p', '--password', type='string', dest='rmq_pass',
help='RabbitMQ password', default='guest')
parse.add_option('-P', '--port', type='int', dest='rmq_port',
help='RabbitMQ port', default='15672')
(opts, args) = parse.parse_args()
# Require at least one argument
if not opts.rmq_server:
parse.print_help()
exit(OK)
try:
api_url = 'http://{0}:{1}@{2}:{3}/api/nodes/'.format(
opts.rmq_user,
opts.rmq_pass,
opts.rmq_server,
opts.rmq_port
)
data = requests.get(api_url).text
if not data:
LOGGER.info('UNKNOWN - No data returned from RabbitMQ')
exit(UNKNOWN)
if len(json.loads(data)[0]['partitions']) > 0:
LOGGER.info('CRITICAL - Partition detected')
exit(CRITICAL)
else:
LOGGER.info('OK - No partition detected')
exit(OK)
except requests.ConnectionError:
LOGGER.critical(
'CRITICAL - Error connecting to %s:%s',
opts.rmq_server,
opts.rmq_port
)
exit(CRITICAL)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment