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

Docker环境下Logstash无法连接ElasticSearch:连接被拒绝

问题排查与修复方案

你遇到的Logstash无法连接Elasticsearch的问题,根源是配置拼写错误、容器网络访问路径错误和配置文件加载路径错误,另外还有服务启动时序的小问题,下面一步步帮你解决:


1. 修复Logstash输出插件的拼写错误

你的logstash.conf里输出插件名称拼错了:elasitcsearch → 正确的是elasticsearch,这个错误会直接导致Logstash无法加载正确的输出插件,进而引发连接问题。

修改后的logstash.conf:

input {
    kafka {
        # 注意:如果Kafka运行在宿主机,需替换为宿主机IP而非localhost;如果Kafka是容器,用对应服务名
        bootstrap_servers => "你的Kafka地址:9092" 
        topics => ["topic"]
    }
}

output {
    elasticsearch { # 这里修正拼写错误
        hosts => ["http://elasticsearch:9200"] # 用docker-compose服务名访问ES容器
        index => "topic"
        workers => 1
    }
    # 新增stdout输出方便调试
    stdout { codec => rubydebug }
}

2. 修正Logstash的配置文件加载路径

你的docker-compose.yml中,已经把本地./logstash_pipeline/挂载到了容器内的/usr/share/logstash/pipeline目录,Logstash默认会自动加载这个目录下的.conf文件,但你用command指定了一个宿主机的绝对路径(容器内不存在这个路径),导致Logstash找不到配置文件,这也是日志里No config files found in path错误的原因。

修改docker-compose.yml中logstash的相关配置:

logstash:
    image: logstash:8.6.0
    container_name: logstash
    #restart: always
    volumes:
    - type: bind
      source: ./logstash_pipeline/ # 确保你的logstash.conf放在这个本地目录下
      target: /usr/share/logstash/pipeline
      read_only: true
    # 删掉下面这行错误的自定义command,让Logstash自动加载pipeline目录
    # command: logstash -f /home/ettore/Documenti/Portfolio/ELK/logstash/logstash.conf 
    depends_on:
      - elasticsearch
    ports:
    - '9600:9600'
    environment:
      xpack.monitoring.enabled: true
      # 建议加上JVM参数限制内存,避免资源占用过高
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"    
    networks:
      - elk

3. 解决容器间网络访问问题

Logstash容器内的localhost指向容器自身,而非宿主机或ES容器,必须用docker-compose中定义的服务名elasticsearch来访问ES(因为它们在同一个elk网络下,Docker会自动解析服务名到对应容器的IP)。

这一点我们已经在logstash.conf的output部分修正,参考了Kibana的正确配置逻辑。

4. 处理Elasticsearch启动延迟问题

depends_on只会等待ES容器启动,不会等待ES服务完全就绪(ES启动需要加载插件、初始化集群,这个过程需要几秒)。可以先单独启动ES,等服务就绪后再启动其他组件:

验证ES是否就绪的方法:在宿主机执行curl http://localhost:9200,如果返回类似下面的JSON,说明ES已经就绪:

{
  "name" : "elasticsearch",
  "cluster_name" : "elf-kafka-cluster",
  "cluster_uuid" : "...",
  "version" : {
    "number" : "8.6.0",
    ...
  },
  "tagline" : "You Know, for Search"
}

验证修复步骤

  1. 把修正后的logstash.conf放到本地的./logstash_pipeline/目录下
  2. 停止所有容器:docker-compose down
  3. 启动ES容器,等待10秒左右确保就绪:docker-compose up -d elasticsearch
  4. 启动Kibana和Logstash:docker-compose up -d kibana logstash
  5. 查看Logstash日志:docker logs -f logstash,如果没有连接拒绝的错误,且能看到Successfully started Logstash API endpoint和日志输出,说明配置正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:05:26