2012-04-23 11 views
10

Ich möchte elasticsearch mit Nagios überwachen. Basicly, ich möchte wissen, ob elasticsearch ist.Wie ElasticSearch mit Nagios zu überwachen

glaube ich, die Elasticsearch Cluster Health API verwenden können (see here)

und verwenden Sie den ‚Status‘, die ich zurück (grün, gelb oder rot), aber ich weiß noch nicht, wie Nagios verwenden (nagios ist auf einem Server und elasticsearc auf einem anderen Server).

Gibt es eine andere Möglichkeit, das zu tun?

EDIT: Ich habe gerade gefunden - check_http_json. Ich denke, ich werde es versuchen.

Antwort

12

Nach einer Weile - ich habe es geschafft, elasticsearch mit der NRPE zu überwachen. Ich wollte die Elasticsearch Cluster Health API verwenden - aber ich konnte es nicht von einem anderen Computer verwenden - aufgrund von Sicherheitsproblemen ... Also, in der Überwachungsserver habe ich einen neuen Dienst erstellt - der check_command ist check_command check_nrpe!check_elastic. Und nun in dem Remote-Server, wo die Elasticsearch ist, habe ich die nrpe.cfg Datei mit dem editierte folgenden:

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

Welcher erlaubt ist, da dieser Befehl von dem Remote-Server ausgeführt wird - so dass keine Sicherheitsprobleme hier ...

Es funktioniert !!! Ich werde immer noch versuchen diesen Check_http_json Befehl, den ich in meinem Qeustion gepostet habe - aber für jetzt ist meine Lösung gut genug.

+0

Vielen Dank für das herauszufinden! Neben der systemübergreifenden Sicherheitsproblematik eignet es sich hervorragend für die Überwachung von Clustern auf Rechnern mit unterschiedlichen Verzeichnisstrukturen. Das check_http-Plugin befindet sich in 3 verschiedenen Verzeichnissen auf unseren verschiedenen Servern. Mit dieser Methode kann ich den Check ausführen, aber den lokalen Pfad zum Plugin-Pfad festlegen. Danke noch einmal! –

6

Nachdem ich mit den Vorschlägen in diesem Beitrag herumgespielt habe, schrieb ich ein einfaches check_elasticsearch Skript. Er gibt den Status OK, WARNING und CRITICAL zurück, die dem Parameter "status" in der Cluster-Health-Response entsprechen ("grün", "gelb" bzw. "rot").

Es greift auch alle anderen Parameter von der Gesundheitsseite und dumpt sie im Standard-Nagios-Format aus.

Viel Spaß!

+1

funktioniert gut und hat keine dummen Abhängigkeiten. Vielen Dank! –

1

Sie können dieses coole Python-Skript zum Überwachen Ihres Elasticsearch-Clusters verwenden. Dieses Skript überprüft Ihren IP: Port auf Elasticsearch Status. Dieses ein und mehr Python-Skript zum Überwachen von Elasticsearch finden Sie unter 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()