You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose部署下Logstash无法连接Elasticsearch求助

解决方案:Logstash无法连接Elasticsearch的排查与修复

1. 强制使用Docker服务名作为ES地址

容器间通信必须用Docker Compose中定义的服务名(比如elasticsearch),而非localhost或宿主机IP——哪怕curl能通,Logstash的配置如果写错地址,照样连不上。

  • 正确配置示例:
    output {
      elasticsearch {
        hosts => ["elasticsearch:9200"]
        # 其余配置项
      }
    }
    
  • 快速验证:在Logstash容器内执行ping elasticsearch,确认能解析到ES容器的IP地址。

2. 配置ES认证权限(7.10+版本必做)

ES默认开启安全机制,Logstash必须用有权限的用户连接:

  1. 进入ES容器创建专用用户:
    bin/elasticsearch-users useradd logstash_writer -p StrongPass123! -r superuser
    
  2. 在Logstash的ES输出配置中添加认证信息:
    elasticsearch {
      hosts => ["elasticsearch:9200"]
      user => "logstash_writer"
      password => "StrongPass123!"
      ssl => true
      ssl_certificate_verification => false # 测试环境临时关闭,生产需配置CA证书
    }
    

3. 对齐ES与Logstash的集群名称

如果你的ES集群名称不是默认的elasticsearch,必须在Logstash配置中明确指定:

elasticsearch {
  hosts => ["elasticsearch:9200"]
  cluster => "your_custom_cluster_name" # 和ES的elasticsearch.yml中cluster.name一致
}

4. 正确配置SSL证书(生产环境)

如果ES启用了SSL,不要只开ssl: true,必须挂载ES的CA证书到Logstash容器,并指定路径:

  1. 在Docker Compose中挂载证书文件:
    logstash:
      volumes:
        - ./elasticsearch-ca.pem:/usr/share/logstash/config/elasticsearch-ca.pem
    
  2. Logstash配置中指定证书:
    elasticsearch {
      hosts => ["elasticsearch:9200"]
      ssl => true
      cacert => "/usr/share/logstash/config/elasticsearch-ca.pem"
      ssl_certificate_verification => true
    }
    

5. 确认ES集群处于可用状态

先确保ES本身没问题,进入ES容器执行:

curl -u elastic:YourElasticPass http://localhost:9200/_cluster/health?pretty

如果状态是red,先修复ES(比如节点未启动、磁盘空间不足、分片未分配)。

6. 验证Logstash配置语法

启动前先检查配置是否有语法错误,进入Logstash容器执行:

bin/logstash -f /path/to/your/config.conf --config.test_and_exit

如果有错误,根据提示修复后再启动。

内容的提问来源于stack exchange,提问作者Théo Rousseau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:02:41