监控脚本如下:zabbix_monitor_elasticsearch.py . 这里需要指定elasticsearch的主机IP
#!/usr/bin/env python
# Rewrite by Wilson Luiz Prosdocimo
# Based on https://github.com/serialsito/Elasticsearch-zabbix
from elasticsearch import *
import sys
# Define the fail message
def zbx_fail():
print "ZBX_NOTSUPPORTED"
sys.exit(2)
# Define groups of keys
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']
jvmkeys = ['heap_used_percent']
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(request_timeout=25)
conn = Elasticsearch([{'host':'192.168.0.138','port':'9200','request_timeout':'25'}])
except Exception, e:
zbx_fail()
if sys.argv[1] == 'cluster':
if sys.argv[2] in clusterkeys:
nodestats = conn.nodes.stats()
subtotal = 0
for nodename in nodestats[u'nodes']:
if sys.argv[2] in indexingkeys:
indexstats = nodestats[u'nodes'][nodename][u'indices'][u'indexing']
elif sys.argv[2] in storekeys:
indexstats = nodestats[u'nodes'][nodename][u'indices'][u'store']
elif sys.argv[2] in getkeys:
indexstats = nodestats[u'nodes'][nodename][u'indices'][u'get']
elif sys.argv[2] in docskeys:
indexstats = nodestats[u'nodes'][nodename][u'indices'][u'docs']
elif sys.argv[2] in searchkeys:
indexstats = nodestats[u'nodes'][nodename][u'indices'][u'search']
try:
subtotal += indexstats[sys.argv[2]]
except Exception, e:
pass
returnval = subtotal
else:
# Try to get a value to match the key provided
try:
returnval = conn.cluster.health()[unicode(sys.argv[2])]
except Exception, e:
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 = 1
elif returnval == 'yellow':
returnval = 2
elif returnval == 'red':
returnval = 3
else:
zbx_fail()
# Mod to check if ES service is up
elif sys.argv[1] == 'service':
if sys.argv[2] == 'status':
try:
conn.ping()
returnval = 1
except Exception, e:
returnval = 0
else: # Not clusterwide, check the next arg
nodestats = conn.nodes.stats()
for nodename in nodestats[u'nodes']:
if sys.argv[1] in nodestats[u'nodes'][nodename][u'name']:
if sys.argv[2] in indexingkeys:
stats = nodestats[u'nodes'][nodename][u'indices'][u'indexing']
elif sys.argv[2] in storekeys:
stats = nodestats[u'nodes'][nodename][u'indices'][u'store']
elif sys.argv[2] in getkeys:
stats = nodestats[u'nodes'][nodename][u'indices'][u'get']
elif sys.argv[2] in docskeys:
stats = nodestats[u'nodes'][nodename][u'indices'][u'docs']
elif sys.argv[2] in searchkeys:
stats = nodestats[u'nodes'][nodename][u'indices'][u'search']
elif sys.argv[2] in jvmkeys:
stats = nodestats[u'nodes'][nodename][u'jvm'][u'mem']
try:
returnval = stats[unicode(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
2.编写zabbix_agentd.conf
UserParameter=ESzabbix[*],/usr/local/zabbix/etc/scripts/ESzabbix.py $1 $2
3.编写item
4.或者上传附件的3个模板
5.创建全局mapping对应关系
Administration---General----Value Mapping
6.创建每个主机的局部宏变量
Configureation----》Host---》Macro
转载于:https://blog.51cto.com/yujianglei/1773842