10

我想使用 nagios 监控弹性搜索。基本上,我想知道弹性搜索是否启动。

我想我可以使用 elasticsearch Cluster Health API(见这里

并使用我返回的“状态”(绿色、黄色或红色),但我仍然不知道如何使用 nagios(nagios 在一台服务器上,而 elasticsearc 在另一台服务器上)。

还有另一种方法吗?

编辑: 我刚刚发现-check_http_json。我想我会试试的。

4

5 回答 5

14

过了一会儿 - 我已经设法使用 nrpe 监控弹性搜索。我想使用 elasticsearch Cluster Health API - 但由于安全问题,我无法在另一台机器上使用它......所以,在监控服务器中,我创建了一个新服务 - check_command 是check_command check_nrpe!check_elastic。现在在弹性搜索所在的远程服务器中,我使用以下内容编辑了 nrpe.cfg 文件:

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

这是允许的,因为这个命令是从远程服务器运行的 - 所以这里没有安全问题......

有用!!!我仍然会尝试我在我的 qeustion 中发布的这个 check_http_json 命令 - 但就目前而言,我的解决方案已经足够好了。

于 2012-05-09T12:28:28.503 回答
6

在尝试了这篇文章中的建议之后,我编写了一个简单的check_elasticsearch脚本。它返回的状态为OKWARNING和 ,CRITICAL对应于集群健康响应中的“status”参数(分别为“green”、“yellow”和“red”)。

它还从健康页面中获取所有其他参数,并以标准 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 集群。此脚本检查您的 IP:port 以了解 Elasticsearch 状态。可以在此处找到用于监控 Elasticsearch 的一个和多个 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 回答
0

我在一百万年前写了这个,它可能仍然有用:https ://github.com/radu-gheorghe/check-es

但这实际上取决于您要监视的内容。上述措施:

  • 如果 Elasticsearch 响应 HTTP
  • 如果摄取率下降到定义的水平以下
  • 如果文档总数下降定义的级别

但当然还有更多有趣的东西。从查询时间到 JVM 堆使用情况。我们在这里写了一篇关于最重要的博客文章:https ://sematext.com/blog/top-10-elasticsearch-metrics-to-watch/

Elasticsearch 为所有这些提供了 API,因此您可以使用通用的check_http_json来获取所需的指标。或者,您可能想要使用诸如Sematext Monitoring for Elasticsearch 之类的东西,它可以开箱即用地获取这些指标,然后将阈值/异常警报转发到 Nagios。(披露:我为 Sematext 工作)

于 2020-03-05T11:03:17.797 回答