10

nagiosを使用してelasticsearchを監視したいと思います。基本的に、elasticsearchが稼働しているかどうかを知りたいです。

Elasticsearch Cluster Health APIを使用できると思います(ここを参照

戻ってきた「ステータス」(緑、黄、赤)を使用しますが、それでもnagiosを使用する方法がわかりません(nagiosは1つのサーバーにあり、elasticsearcは別のサーバーにあります)。

それを行う別の方法はありますか?

編集: 私はちょうどそれを見つけました-check_http_json。やってみようと思います。

4

5 に答える 5

14

しばらくすると、nrpe を使用して Elasticsearch を監視できました。Elasticsearch Cluster Health API を使用したかったのですが、セキュリティ上の問題により、別のマシンからは使用できませんでした...そのため、監視サーバーで新しいサービスを作成しました。これは 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

このコマンドはリモートサーバーから実行されるため、これは許可されています-したがって、ここではセキュリティの問題はありません...

できます!!!質問に投稿したこの check_http_json コマンドを引き続き試しますが、今のところ、私の解決策で十分です。

于 2012-05-09T12:28:28.503 に答える
6

この投稿の提案を試した後、簡単なcheck_elasticsearchスクリプトを作成しました。OKステータスを、WARNING、およびクラスタ ヘルス レスポンスの「ステータス」パラメータに対応するものとして返しますCRITICAL(それぞれ「緑」、「黄色」、「赤」)。

また、ヘルスページから他のすべてのパラメーターを取得し、標準の Nagios 形式でダンプします。

楽しみ!

于 2012-09-21T23:46:50.557 に答える
2

恥知らずなプラグイン: https://github.com/jersten/check-es

ZenOSS/Nagios で使用して、クラスターの状態、データ インデックス、および個々のノード ヒープの使用状況を監視できます。

于 2014-11-03T23:09:06.367 に答える
2

このクールな Python スクリプトを使用して、Elasticsearch クラスターを監視できます。このスクリプトは、Elasticsearch のステータスについて IP:port を確認します。Elasticsearch を監視するためのこの 1 つ以上の Python スクリプトは、ここにあります。

#!/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()
于 2016-09-14T09:17:57.900 に答える