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必须用有权限的用户连接:
- 进入ES容器创建专用用户:
bin/elasticsearch-users useradd logstash_writer -p StrongPass123! -r superuser - 在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容器,并指定路径:
- 在Docker Compose中挂载证书文件:
logstash: volumes: - ./elasticsearch-ca.pem:/usr/share/logstash/config/elasticsearch-ca.pem - 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
相关产品推荐
相关产品推荐

