You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Logstash无法连接远程ElasticSearch,请求排查连接拒绝问题

排查Logstash无法连接远程ElasticSearch的常见原因

你碰到的Connection refused错误其实很常见——虽然在ElasticSearch主机上用curl -I http://localhost:9200能正常拿到响应,但Logstash连不上,基本都是网络层面的访问限制或者ES自身绑定配置的问题,下面是几个最值得优先排查的方向:

1. ElasticSearch仅绑定了localhost地址

默认情况下,很多ES安装会把监听地址设为127.0.0.1(也就是只允许本机访问),这种情况下远程的Logstash自然连不上。

  • 排查操作:在ES主机上执行以下命令,查看9200端口的监听地址:
    netstat -tulpn | grep 9200
    # 或者用更现代的ss命令
    ss -tulpn | grep 9200
    
    如果输出里的地址是127.0.0.1:9200,说明确实只绑定了localhost;如果是0.0.0.0:9200,则表示允许所有IP访问。
  • 解决办法:修改ES的配置文件elasticsearch.yml,找到network.host参数,将其设置为0.0.0.0(允许所有IP)或者ES主机的实际对外IP,之后重启ES服务。

2. ES主机的防火墙/安全组挡住了9200端口

即使ES已经允许远程访问,主机的防火墙或者云服务器的安全组也可能拦截了Logstash的请求。

  • 排查操作:在Logstash所在的机器上,直接尝试访问ES的端口:
    curl -I http://<another_host_ip>:9200
    # 或者用telnet测试连通性
    telnet <another_host_ip> 9200
    
    如果同样返回Connection refused或者超时,说明网络通路被阻断了。
  • 解决办法:
    • 针对Linux防火墙:如果是ufw,执行sudo ufw allow 9200/tcp;如果是firewalld,执行sudo firewall-cmd --add-port=9200/tcp --permanent && sudo firewall-cmd --reload
    • 针对云服务器:登录云平台控制台,在安全组规则中添加允许Logstash所在IP访问9200端口的入站规则。

3. Logstash配置中的IP地址有误

仔细核对Logstash输出配置里的<another_host_ip>是不是ES主机的正确地址——比如误填了内网IP但Logstash在另一个网络,或者IP拼写错误。

  • 验证操作:在Logstash机器上执行ping <another_host_ip>,看看能不能正常ping通;如果是云环境,确认用的是公网IP还是内网IP,确保两者在同一网络(或者公网IP能被访问)。

4. ElasticSearch的HTTP端口被修改(可能性较低)

虽然ES默认用9200端口,但如果修改过http.port配置,Logstash里的端口也要对应调整。

  • 排查操作:在ES主机上执行以下命令,查看实际的HTTP端口:
    curl -I http://localhost:9200/_nodes/http
    
    输出里会显示当前ES使用的HTTP端口,如果不是9200,就需要在Logstash的elasticsearch输出配置里加上port => "xxx"参数。

内容的提问来源于stack exchange,提问作者Panda1667075

火山引擎 最新活动