2012-04-23 26 views
10

Vorrei monitorare elasticsearch utilizzando nagios. Basicamente, voglio sapere se elasticsearch è attivo.Come monitorare elasticsearch utilizzando nagios

credo di poter utilizzare l'API Salute elasticsearch Cluster (see here)

e utilizzare il 'status' che torno (verde, giallo o rosso), ma ancora non si sa come utilizzare Nagios per questo (nagios è su un server ed elasticsearc è su un altro server).

C'è un altro modo per farlo?

MODIFICA: Ho appena trovato che - check_http_json. Penso che ci proverò.

risposta

12

Dopo un po ', sono riuscito a monitorare elasticsearch utilizzando nrpe. Volevo utilizzare l'API di Cluster Health elasticsearch, ma non ho potuto utilizzarlo da un altro computer, a causa di problemi di sicurezza ... Quindi, nel server di monitoraggio ho creato un nuovo servizio, che il check_command è check_command check_nrpe!check_elastic. E ora nel server remoto, dove l'elasticsearch è, ho Editted il file nrpe.cfg con il seguente:

command[check_elastic]=/usr/local/nagios/libexec/check_http -H localhost -u /_cluster/health -p 9200 -w 2 -c 3 -s green 

cui è consentita, dal momento che questo comando viene eseguito dal server remoto - quindi nessun problema di sicurezza qui ...

Funziona !!! Continuerò a provare questo comando check_http_json che ho postato nel mio qeustion - ma per ora la mia soluzione è abbastanza buona.

+0

Grazie per aver capito! Oltre a lavorare su tutti i sistemi per aggirare i problemi di sicurezza, è ottimo per monitorare i cluster sulla macchina con diverse strutture di directory. Il plugin check_http è in 3 diverse directory sui nostri vari server. Questo metodo mi consente di eseguire il controllo, ma lasciare che la macchina locale gestisca il percorso del plugin. Grazie ancora! –

6

Dopo aver giocato con i suggerimenti in questo post, ho scritto un semplice script check_elasticsearch. Restituisce lo stato OK, WARNING e CRITICAL corrispondente al parametro "stato" nella risposta di integrità del cluster ("verde", "giallo" e "rosso" rispettivamente).

Prende anche tutti gli altri parametri dalla pagina della salute e li scarica nel formato standard Nagios.

Divertiti!

+1

funziona bene e non ha dipendenze stupide. Grazie! –

1

È possibile utilizzare questo fantastico script Python per il monitoraggio del cluster Elasticsearch. Questo script controlla il tuo IP: porta per lo stato Elasticsearch. Questo e più script Python per il monitoraggio di Elasticsearch possono essere trovati here.

#!/usr/bin/python 
from nagioscheck import NagiosCheck, UsageError 
from nagioscheck import PerformanceMetric, Status 
import urllib2 
import optparse 

try: 
    import json 
except ImportError: 
    import simplejson as json 


class ESClusterHealthCheck(NagiosCheck): 

    def __init__(self): 

     NagiosCheck.__init__(self) 

     self.add_option('H', 'host', 'host', 'The cluster to check') 
     self.add_option('P', 'port', 'port', 'The ES port - defaults to 9200') 

    def check(self, opts, args): 
     host = opts.host 
     port = int(opts.port or '9200') 

     try: 
      response = urllib2.urlopen(r'http://%s:%d/_cluster/health' 
             % (host, port)) 
     except urllib2.HTTPError, e: 
      raise Status('unknown', ("API failure", None, 
         "API failure:\n\n%s" % str(e))) 
     except urllib2.URLError, e: 
      raise Status('critical', (e.reason)) 

     response_body = response.read() 

     try: 
      es_cluster_health = json.loads(response_body) 
     except ValueError: 
      raise Status('unknown', ("API returned nonsense",)) 

     cluster_status = es_cluster_health['status'].lower() 

     if cluster_status == 'red': 
      raise Status("CRITICAL", "Cluster status is currently reporting as " 
         "Red") 
     elif cluster_status == 'yellow': 
      raise Status("WARNING", "Cluster status is currently reporting as " 
         "Yellow") 
     else: 
      raise Status("OK", 
         "Cluster status is currently reporting as Green") 

if __name__ == "__main__": 
    ESClusterHealthCheck().run() 
Problemi correlati