~thomnico/charms/trusty/zabbix-agent/trunk

« back to all changes in this revision

Viewing changes to data/bin/ESzabbix.py

  • Committer: Samuel Cozannet
  • Date: 2014-10-07 19:33:59 UTC
  • Revision ID: samnco@gmail.com-20141007193359-hfp5j2v86gqxhmbd
removing .git history from tracking and latest ES additions

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
# Created by Aaron Mildenstein on 19 SEP 2012
 
4
 
 
5
from pyes import *
 
6
import sys
 
7
 
 
8
# Define the fail message
 
9
def zbx_fail():
 
10
    print "ZBX_NOTSUPPORTED"
 
11
    sys.exit(2)
 
12
    
 
13
searchkeys = ['query_total', 'fetch_time_in_millis', 'fetch_total', 'fetch_time', 'query_current', 'fetch_current', 'query_time_in_millis']
 
14
getkeys = ['missing_total', 'exists_total', 'current', 'time_in_millis', 'missing_time_in_millis', 'exists_time_in_millis', 'total']
 
15
docskeys = ['count', 'deleted']
 
16
indexingkeys = ['delete_time_in_millis', 'index_total', 'index_current', 'delete_total', 'index_time_in_millis', 'delete_current']
 
17
storekeys = ['size_in_bytes', 'throttle_time_in_millis']
 
18
cachekeys = ['filter_size_in_bytes', 'field_size_in_bytes', 'field_evictions']
 
19
clusterkeys = searchkeys + getkeys + docskeys + indexingkeys + storekeys
 
20
returnval = None
 
21
 
 
22
# __main__
 
23
 
 
24
# We need to have two command-line args: 
 
25
# sys.argv[1]: The node name or "cluster"
 
26
# sys.argv[2]: The "key" (status, filter_size_in_bytes, etc)
 
27
 
 
28
if len(sys.argv) < 3:
 
29
    zbx_fail()
 
30
 
 
31
# Try to establish a connection to elasticsearch
 
32
try:
 
33
    conn = ES('localhost:9200',timeout=25,default_indices=[''])
 
34
except Exception, e:
 
35
    zbx_fail()
 
36
 
 
37
 
 
38
if sys.argv[1] == 'cluster':
 
39
    if sys.argv[2] in clusterkeys:
 
40
        nodestats = conn.cluster_stats()
 
41
        subtotal = 0
 
42
        for nodename in nodestats['nodes']:
 
43
            if sys.argv[2] in indexingkeys:
 
44
                indexstats = nodestats['nodes'][nodename]['indices']['indexing']
 
45
            elif sys.argv[2] in storekeys:
 
46
                indexstats = nodestats['nodes'][nodename]['indices']['store']
 
47
            elif sys.argv[2] in getkeys:
 
48
                indexstats = nodestats['nodes'][nodename]['indices']['get']
 
49
            elif sys.argv[2] in docskeys:
 
50
                indexstats = nodestats['nodes'][nodename]['indices']['docs']
 
51
            elif sys.argv[2] in searchkeys:
 
52
                indexstats = nodestats['nodes'][nodename]['indices']['search']
 
53
            try:
 
54
                subtotal += indexstats[sys.argv[2]]
 
55
            except Exception, e:
 
56
                pass
 
57
        returnval = subtotal
 
58
 
 
59
 
 
60
    else:
 
61
        # Try to pull the managers object data
 
62
        try:
 
63
            escluster = managers.Cluster(conn)
 
64
        except Exception, e:
 
65
            zbx_fail()
 
66
        # Try to get a value to match the key provided
 
67
        try:
 
68
            returnval = escluster.health()[sys.argv[2]]
 
69
        except Exception, e:
 
70
            zbx_fail()
 
71
        # If the key is "status" then we need to map that to an integer
 
72
        if sys.argv[2] == 'status':
 
73
            if returnval == 'green':
 
74
                returnval = 0
 
75
            elif returnval == 'yellow':
 
76
                returnval = 1
 
77
            elif returnval == 'red':
 
78
                returnval = 2
 
79
            else:
 
80
                zbx_fail()
 
81
 
 
82
# Mod to check if ES service is up
 
83
elif sys.argv[1] == 'service':
 
84
    if sys.argv[2] == 'status':
 
85
        try:
 
86
            conn.status()
 
87
            returnval = 1
 
88
        except Exception, e:
 
89
            returnval = 0
 
90
 
 
91
else: # Not clusterwide, check the next arg
 
92
 
 
93
    nodestats = conn.cluster_stats()
 
94
    print nodestats
 
95
    for nodename in nodestats['nodes']:
 
96
        if sys.argv[1] in nodestats['nodes'][nodename]['name']:
 
97
            if sys.argv[2] in indexingkeys:
 
98
                stats = nodestats['nodes'][nodename]['indices']['indexing']
 
99
            elif sys.argv[2] in storekeys:
 
100
                stats = nodestats['nodes'][nodename]['indices']['store']
 
101
            elif sys.argv[2] in getkeys:
 
102
                stats = nodestats['nodes'][nodename]['indices']['get']
 
103
            elif sys.argv[2] in docskeys:
 
104
                stats = nodestats['nodes'][nodename]['indices']['docs']
 
105
            elif sys.argv[2] in searchkeys:
 
106
                stats = nodestats['nodes'][nodename]['indices']['search']
 
107
            elif sys.argv[2] in cachekeys:
 
108
                stats = nodestats['nodes'][nodename]['indices']['cache']
 
109
            try:
 
110
                returnval = stats[sys.argv[2]]
 
111
            except Exception, e:
 
112
                pass
 
113
 
 
114
 
 
115
# If we somehow did not get a value here, that's a problem.  Send back the standard 
 
116
# ZBX_NOTSUPPORTED
 
117
if returnval is None:
 
118
    zbx_fail()
 
119
else:
 
120
    print returnval
 
121
 
 
122
# End
 
123