| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #!/usr/bin/env python
- # Created by Aaron Mildenstein on 19 SEP 2012
- # Switchted from pyes to Elasticsearch for better Health Monitoring by Marcel Alburg on 17 JUN 2014
- from elasticsearch import Elasticsearch
- import sys
- import json
- # Define the fail message
- def zbx_fail():
- print "ZBX_NOTSUPPORTED"
- sys.exit(2)
-
- searchkeys = ['query_total', 'fetch_time_in_millis', 'fetch_total', 'fetch_time', 'query_current', 'fetch_current', 'query_time_in_millis']
- getkeys = ['missing_total', 'exists_total', 'current', 'time_in_millis', 'missing_time_in_millis', 'exists_time_in_millis', 'total']
- docskeys = ['count', 'deleted']
- indexingkeys = ['delete_time_in_millis', 'index_total', 'index_current', 'delete_total', 'index_time_in_millis', 'delete_current']
- storekeys = ['size_in_bytes', 'throttle_time_in_millis']
- cachekeys = ['filter_size_in_bytes', 'field_size_in_bytes', 'field_evictions']
- clusterkeys = searchkeys + getkeys + docskeys + indexingkeys + storekeys
- returnval = None
- # __main__
- # We need to have two command-line args:
- # sys.argv[1]: The node name or "cluster"
- # sys.argv[2]: The "key" (status, filter_size_in_bytes, etc)
- if len(sys.argv) < 3:
- zbx_fail()
- # Try to establish a connection to elasticsearch
- try:
- conn = Elasticsearch('localhost:9200', sniff_on_start=False)
- except Exception, e:
-
- zbx_fail()
- if sys.argv[1] == 'cluster':
- if sys.argv[2] in clusterkeys:
- nodestats = conn.cluster.stats()
- subtotal = 0
- for nodename in nodestats['nodes']:
- try:
- if sys.argv[2] in indexingkeys:
- indexstats = nodestats['nodes'][nodename]['indices']['indexing']
- elif sys.argv[2] in storekeys:
- indexstats = nodestats['nodes'][nodename]['indices']['store']
- elif sys.argv[2] in getkeys:
- indexstats = nodestats['nodes'][nodename]['indices']['get']
- elif sys.argv[2] in docskeys:
- indexstats = nodestats['nodes'][nodename]['indices']['docs']
- elif sys.argv[2] in searchkeys:
- indexstats = nodestats['nodes'][nodename]['indices']['search']
- except Exception, e:
- pass
- try:
- if sys.argv[2] in indexstats:
- subtotal += indexstats[sys.argv[2]]
- except Exception, e:
- pass
- returnval = subtotal
- else:
- # Try to pull the managers object data
- try:
- escluster = conn.cluster
- except Exception, e:
- if sys.argv[2] == 'status':
- returnval = "red"
- else:
- zbx_fail()
- # Try to get a value to match the key provided
- try:
- returnval = escluster.health()[sys.argv[2]]
- except Exception, e:
- if sys.argv[2] == 'status':
- returnval = "red"
- else:
- zbx_fail()
- # If the key is "status" then we need to map that to an integer
- if sys.argv[2] == 'status':
- if returnval == 'green':
- returnval = 0
- elif returnval == 'yellow':
- returnval = 1
- elif returnval == 'red':
- returnval = 2
- else:
- zbx_fail()
- # Mod to check if ES service is up
- elif sys.argv[1] == 'service':
- if sys.argv[2] == 'status':
- try:
- conn.cluster.stats()
- returnval = 1
- except Exception, e:
- returnval = 0
- else: # Not clusterwide, check the next arg
- nodestats = conn.nodes.stats()
- for nodename in nodestats['nodes']:
- if sys.argv[1] in nodestats['nodes'][nodename]['name']:
- if sys.argv[2] in indexingkeys:
- stats = nodestats['nodes'][nodename]['indices']['indexing']
- elif sys.argv[2] in storekeys:
- stats = nodestats['nodes'][nodename]['indices']['store']
- elif sys.argv[2] in getkeys:
- stats = nodestats['nodes'][nodename]['indices']['get']
- elif sys.argv[2] in docskeys:
- stats = nodestats['nodes'][nodename]['indices']['docs']
- elif sys.argv[2] in searchkeys:
- stats = nodestats['nodes'][nodename]['indices']['search']
- try:
- returnval = stats[sys.argv[2]]
- except Exception, e:
- pass
- # If we somehow did not get a value here, that's a problem. Send back the standard
- # ZBX_NOTSUPPORTED
- if returnval is None:
- zbx_fail()
- else:
- print returnval
- # End
|