mirror of
https://github.com/shouptech/nagios-plugin-check-rabbitmq.git
synced 2026-02-03 14:49:41 +00:00
Added high memory alarm check
This commit is contained in:
parent
ee2e8f05f8
commit
54870bf09d
1 changed files with 101 additions and 0 deletions
101
check_rabbitmq.py
Executable file
101
check_rabbitmq.py
Executable file
|
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# check_rabbitmq.py
|
||||
|
||||
"""A program for remotely checking the health of RabbitMQ instance. Requires
|
||||
the management API available."""
|
||||
|
||||
from optparse import OptionParser
|
||||
import sys
|
||||
import urllib2
|
||||
import base64
|
||||
|
||||
try:
|
||||
import json
|
||||
except ImportError:
|
||||
# simplejson can be used with Python 2.4
|
||||
import simplejson as json
|
||||
|
||||
PLUGIN_VERSION = "0.1"
|
||||
|
||||
# Nagios status codes (Nagios expects one of these to be returned)
|
||||
STATE_OK = 0
|
||||
STATE_WARNING = 1
|
||||
STATE_CRITICAL = 2
|
||||
STATE_UNKNOWN = 3
|
||||
|
||||
class RabbitAPIChecker(object):
|
||||
"""Performs checks against the RabbitMQ API and returns the results"""
|
||||
|
||||
def __init__(self, hostname, username, password, port=15672):
|
||||
self.hostname = hostname
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.port = port
|
||||
|
||||
def memory_alarm(self, node):
|
||||
"""Calls the API and checks if a high memory alarm has been
|
||||
triggerred."""
|
||||
url = "http://%s:%s/api/nodes/%s" % (self.hostname, self.port, node)
|
||||
result = self.fetch_from_api(url)
|
||||
|
||||
if 'mem_alarm' in result:
|
||||
if result['mem_alarm']:
|
||||
print "CRITICAL - Memory alarm triggered for %s" % node
|
||||
exit(STATE_CRITICAL)
|
||||
else:
|
||||
print "OK - Memory alarm not triggered for %s" % node
|
||||
exit(STATE_OK)
|
||||
else:
|
||||
print "UNKNOWN - mem_alarm not found in results from API"
|
||||
exit(STATE_UNKNOWN)
|
||||
|
||||
def fetch_from_api(self, url):
|
||||
"""Calls the API and processes the JSON result."""
|
||||
request = urllib2.Request(url)
|
||||
base64string = base64.encodestring(
|
||||
'%s:%s' % (self.username, self.password)).replace('\n', '')
|
||||
request.add_header("Authorization", "Basic %s" % base64string)
|
||||
|
||||
try:
|
||||
http_result = urllib2.urlopen(request)
|
||||
except urllib2.HTTPError, exception:
|
||||
print "UNKNOWN - %s" % exception
|
||||
exit(STATE_UNKNOWN)
|
||||
|
||||
json_result = json.load(http_result)
|
||||
http_result.close()
|
||||
return json_result
|
||||
|
||||
def main():
|
||||
"""Main entry point for program"""
|
||||
usage = "%prog [options] -H|--hostname HOST ACTION"
|
||||
parser = OptionParser(usage=usage,
|
||||
version="%prog "+PLUGIN_VERSION)
|
||||
parser.add_option("-u", "--username", default="guest",
|
||||
help="Username with monitoring access")
|
||||
parser.add_option("-p", "--password", default="guest",
|
||||
help="Password for user with monitoring access")
|
||||
parser.add_option("-P", "--port", default=15672,
|
||||
help="Port to run the API checks against")
|
||||
parser.add_option("-H", "--hostname",
|
||||
help="Host to check")
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
# Check for required arguments
|
||||
if len(args) < 1 or options.hostname == None:
|
||||
parser.print_usage()
|
||||
exit(STATE_UNKNOWN)
|
||||
|
||||
checker = RabbitAPIChecker(options.hostname, options.username,
|
||||
options.password, options.port)
|
||||
|
||||
if args[0] == 'mem_alarm':
|
||||
# Check if high memory alarm has been triggered
|
||||
if len(args) < 2:
|
||||
sys.stderr.write("Action mem_alarm requires a NODE\n")
|
||||
exit(STATE_UNKNOWN)
|
||||
checker.memory_alarm(args[1])
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Reference in a new issue