如何使用Python获取企业Elasticsearch数据及连接报错排查
报错核心原因
你两次连接使用的端口5601是Kibana的默认服务端口,而Elasticsearch Python客户端需要直接连接Elasticsearch本身的服务端口,二者不能混用,这是报错的根本原因。
两个报错的具体解释:
ConnectionError(WinError 10061):你尝试连接的10.251.0.135:5601没有对应的服务监听,IP或端口不可达。TransportError(302, ''):你访问的10.251.0.134:5601是正常运行的Kibana服务,Kibana收到ES客户端的API请求后返回了302跳转(一般跳转到登录页或首页),无法响应ES客户端的请求,所以抛出传输错误。
你可以正常访问Kibana仅代表Kibana的端口对你开放,不代表你可以用Kibana的地址连接ES客户端,Kibana是独立的可视化服务,本身会在后台和ES通信,和你本地直接连ES的逻辑无关。
解决方案
- 首先确认Elasticsearch服务本身的部署信息:包括IP地址、HTTP服务端口(默认为
9200)、访问协议(HTTP/HTTPS)、是否需要账号密码认证,不清楚可以找负责部署ES的运维人员索要。 - 修正Python连接代码,不同场景的示例如下:
- 场景1:ES为HTTP协议、无认证、部署在10.251.0.134的9200端口
from elasticsearch import Elasticsearch es = Elasticsearch("http://10.251.0.134:9200/") # 验证连接是否正常 print(es.info()) - 场景2:ES需要账号密码认证
es = Elasticsearch( "http://10.251.0.134:9200/", basic_auth=("你的ES账号", "你的ES密码") ) - 场景3:ES使用自签HTTPS证书,可临时关闭证书校验(不建议生产环境使用)
es = Elasticsearch( "https://10.251.0.134:9200/", basic_auth=("你的ES账号", "你的ES密码"), verify_certs=False )
- 场景1:ES为HTTP协议、无认证、部署在10.251.0.134的9200端口
你可以先通过浏览器直接访问ES的HTTP地址(比如http://10.251.0.134:9200)验证地址是否可达,正常会返回包含ES版本、集群名称的JSON信息。
内容的提问来源于stack exchange,提问作者Ebettuki
相关产品推荐
相关产品推荐

