2012-04-23 14 views
10

Chciałbym monitorować elastyczne wyszukiwanie przy użyciu nagios. Basiclly, chcę wiedzieć, czy elasticsearch jest w górze.Jak monitorować elastyczne wyszukiwanie za pomocą nagios

myślę, że mogę użyć API elasticsearch Klaster Zdrowia (see here)

i użyć „status”, że wrócę (zielony, żółty lub czerwony), ale nadal nie wiem, jak korzystać z Nagios w tym przypadku (nagios jest na jednym serwerze, a elasticsearc jest na innym serwerze).

Czy jest inny sposób na zrobienie tego?

EDIT: Właśnie okazało się, że - check_http_json. Myślę, że spróbuję.

Odpowiedz

12

Po chwili - udało mi się monitorować elastyczne wyszukiwanie przy użyciu nrpe. Chciałem użyć elasticsearch Cluster Health API - ale nie mogłem go używać z innej maszyny - ze względu na problemy z bezpieczeństwem ... Tak więc na serwerze monitorowania utworzyłem nową usługę - której check_command to check_command check_nrpe!check_elastic. A teraz w zdalnym serwerze, gdzie elasticsearch jest, mam editted plik nrpe.cfg z następujących czynności:

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

Która jest dozwolone, ponieważ to polecenie jest uruchamiane ze zdalnego serwera - tak ma problemy z bezpieczeństwem tutaj ...

Działa !!! Będę nadal próbował tego polecenia check_http_json, które opublikowałem w mojej ofercie - ale na razie moje rozwiązanie jest wystarczająco dobre.

+0

Dzięki za zrozumienie tego! Oprócz pracy nad systemami w celu obejścia problemów z bezpieczeństwem, świetnie nadaje się do monitorowania klastrów na komputerze z różnymi strukturami katalogów. Wtyczka check_http znajduje się w 3 różnych katalogach na różnych naszych serwerach. Ta metoda pozwala mi uruchomić kontrolę, ale niech lokalny komputer zarządza ścieżką wtyczki. Dzięki jeszcze raz! –

6

Po zabawie z sugestiami w tym poście, napisałem prosty skrypt check_elasticsearch. Zwraca status jako OK, WARNING i CRITICAL odpowiadający parametrowi "status" w odpowiedzi kondycji klastra (odpowiednio "zielony", "żółty" i "czerwony").

Pobiera także wszystkie inne parametry ze strony zdrowia i zrzuca je w standardowym formacie Nagios.

Ciesz się!

+1

działa dobrze i nie ma głupich zależności. dzięki! –

1

Możesz użyć tego fajnego skryptu w języku Python do monitorowania swojego klastra Elasticsearch. Ten skrypt sprawdza twój IP: port dla statusu Elasticsearch. Ten jeden i więcej skryptów Python do monitorowania Elasticsearch można znaleźć 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()