【问题标题】:check elasticsearch connection status in python在python中检查elasticsearch连接状态
【发布时间】:2015-09-21 08:58:21
【问题描述】:

我正在尝试在本地连接 elasticsearch,我想知道在继续处理之前如何知道连接是成功还是失败: 我希望下面我使用的方式是可能的,但不是(它返回的值太多但都没用):

try:
    es = Elasticsearch(['http://localhost:9200/'], verify_certs=True)
except Exception as err:
    if "Connection refused" in err.message:
        logging.error("Connection failed")

我希望有一种方法可以像这样检查连接状态:

if es == false:
    raise ValueError("Connection failed")

【问题讨论】:

    标签: python elasticsearch


    【解决方案1】:

    您可以在创建Elasticsearch 实例后调用ping,如下所示:

    es = Elasticsearch(['http://localhost:9200/'], verify_certs=True)
    
    if not es.ping():
        raise ValueError("Connection failed")
    

    【讨论】:

    • 我知道它的旧帖子,但目前即使我也在寻找同一个问题的答案,但你的答案的问题是当弹性搜索服务关闭时 es.ping() 不会返回 False但返回错误
    • 您仍然可以将 es.ping 调用包装在 try/catch 块中(就像在原始问题中一样),这样也可以完成这项工作。
    • 问题是引发的异常是链式的。我的意思是引发的最后一个异常是 ConnectionError 但在此之前它也会引发 NewConnectionError 和 ConnectionRefusedError ,所以应该处理哪一个。因为它仍然打印异常的堆栈跟踪
    • 任何提示无法进行 ping 的错误。所以基本上任何连接错误
    • 不工作` raise BadStatusLine(line) urllib3.exceptions.ProtocolError: ('Connection aborted.', BadStatusLine('This is not a HTTP port',))`
    【解决方案2】:

    我有同样的urllib3.exceptions.ProtocolError 问题,所以自己弥补。

    import requests
    def isRunning(self):
        try:
            res = requests.get("http://localhost:9200/_cluster/health")
            if res.status_code == 200:
                if res.json()['number_of_nodes'] > 0:
                    return True
            return False
        except Exception as e:
            print(e)
            return False
    

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 2018-06-06
      • 2013-12-22
      • 1970-01-01
      • 2021-09-02
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多