nagios

2012-04-23 24 views
10

का उपयोग करके elasticsearch की निगरानी कैसे करें मैं nagios का उपयोग कर elasticsearch की निगरानी करना चाहता हूँ। बेसिकली, मैं जानना चाहता हूं कि लोचदार खोज है या नहीं।nagios

मुझे लगता है मैं elasticsearch क्लस्टर स्वास्थ्य एपीआई (see here)

का उपयोग करें और 'स्थिति' है कि मैं वापस आ गया (हरे, पीले या लाल) प्राप्त उपयोग कर सकते हैं, लेकिन मैं अभी भी कैसे Nagios उपयोग करने के लिए पता नहीं है उस मामले के लिए (nagios एक सर्वर पर है और elasticsearc दूसरे सर्वर पर है)।

क्या ऐसा करने का कोई और तरीका है?

संपादित करें: मुझे अभी पता चला है - check_http_json। मुझे लगता है कि मैं कोशिश करूँगा।

उत्तर

12

थोड़ी देर के बाद - मैंने nrpe का उपयोग करके elasticsearch की निगरानी करने में कामयाब रहा है। मैं लोचदार खोज क्लस्टर हेल्थ एपीआई का उपयोग करना चाहता था - लेकिन मैं इसे अन्य मशीनों से उपयोग नहीं कर सका - सुरक्षा मुद्दों के कारण ... तो, निगरानी सर्वर में मैंने एक नई सेवा बनाई - जो check_command check_command check_nrpe!check_elastic है। और अब दूरस्थ सर्वर, जहां elasticsearch है में, मैं के साथ nrpe.cfg फ़ाइल उसे संपादित किया है निम्नलिखित:

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

है कौन, अनुमति के बाद से इस आदेश को रिमोट सर्वर से चलाया जाता है - तो कोई सुरक्षा के मुद्दों यहां ...

यह काम करता है !!! मैं अभी भी इस चेक_http_json कमांड को आजमाउंगा जो मैंने अपने क्यूस्टन में पोस्ट किया था - लेकिन अभी के लिए, मेरा समाधान काफी अच्छा है।

+0

इसे समझने के लिए धन्यवाद! सुरक्षा के मुद्दों को पाने के लिए सिस्टम में काम करने के अलावा, अलग-अलग निर्देशिका संरचनाओं के साथ मशीन पर क्लस्टर की निगरानी करना बहुत अच्छा है। Check_http प्लगइन हमारे विभिन्न सर्वरों पर 3 अलग-अलग निर्देशिकाओं में है। यह विधि मुझे चेक चलाने देती है, लेकिन स्थानीय मशीन प्लगइन पथ का प्रबंधन करने दें। एक बार फिर धन्यवाद! –

6

इस पोस्ट में दिए गए सुझावों के साथ खेलने के बाद, मैंने एक साधारण check_elasticsearch स्क्रिप्ट लिखी। यह क्लस्टर स्वास्थ्य प्रतिक्रिया ("हरा", "पीला", और "लाल" क्रमशः "स्थिति" पैरामीटर के अनुरूप OK, WARNING, और CRITICAL के रूप में स्थिति देता है।

यह स्वास्थ्य पृष्ठ से अन्य सभी मानकों को भी पकड़ता है और मानक नागियो प्रारूप में उन्हें बाहर निकाल देता है।

आनंद लें!

+1

अच्छी तरह से काम करता है और इसमें कोई बेवकूफ निर्भरता नहीं है। धन्यवाद! –

2

बेशर्म प्लग: https://github.com/jersten/check-es

आप क्लस्टर हेल्थ, डेटा सूचकांक, और व्यक्तिगत नोड ढेर उपयोग की निगरानी Zenoss/Nagios के साथ इसका इस्तेमाल कर सकते हैं।

+0

क्या मैं इसके साथ unassigned_shards की जांच कर सकता हूं? – flickerfly

1

आप अपने लोचदार खोज क्लस्टर की निगरानी के लिए इस शांत पायथन स्क्रिप्ट का उपयोग कर सकते हैं। यह स्क्रिप्ट लोचदार खोज स्थिति के लिए अपने आईपी: पोर्ट की जांच करें। Elasticsearch की निगरानी के लिए यह एक और अधिक पायथन लिपि 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()