Docker环境下运行的Logstash如何修改默认Elasticsearch连接URL
问题根源排查
你遇到的无法连通问题由以下几个配置错误共同导致:
- Logstash服务下存在两个重复的
environment配置块,后定义的LS_JAVA_OPTS配置块会覆盖前一个,你设置的ELASTICSEARCH_HOST根本没有被加载到容器中 - 你将
ELASTICSEARCH_HOST设为localhost是错误的:Logstash容器内的localhost指向容器自身,不是同一网络下的Elasticsearch服务 - 你挂载Logstash配置时仅指定了本地路径,没有填写容器内的挂载路径,本地的配置文件根本没有加载到容器中
- Logstash的Elasticsearch地址配置存在优先级:管道输出配置 > logstash.yml全局配置 > 环境变量,高优先级的配置会覆盖低优先级的配置
修复步骤
1. 修正docker-compose.yml中的Logstash配置
合并重复的environment块,修正配置挂载路径,填入正确的Elasticsearch服务地址(同一网络下直接用ES的服务名es01即可):
logstash: image: logstash:7.14.0 container_name: logstash ports: - 9600:9600 - 8089:8089 volumes: # 补充容器内的挂载路径,确保本地配置生效 - ./logstash/logstash.yml:/usr/share/logstash/config/logstash.yml - ./logstash/pipelines.yml:/usr/share/logstash/config/pipelines.yml - ./logstash/data:/usr/share/logstash/data command: --config.reload.automatic environment: LS_JAVA_OPTS: "-Xmx1g -Xms1g" # 使用复数形式的环境变量,值为ES服务的访问地址 ELASTICSEARCH_HOSTS: "http://es01:9200" depends_on: - es01 networks: - elastic
注意:links参数已经废弃,同一自定义网络下的服务可以直接通过服务名互相通信,不需要额外配置links。
2. 检查管道配置(优先级最高)
如果修改完docker-compose配置后仍然报错,说明你在管道的输出配置里写死了默认的elasticsearch:9200地址。打开你本地存放管道配置的目录(通常是./logstash/pipeline/)下的conf配置文件,修改elasticsearch输出块:
output { elasticsearch { # 替换为正确的ES地址 hosts => ["http://es01:9200"] # 其余原有配置保持不变即可 } }
3. (可选)修改logstash.yml全局配置
如果你没有在管道中单独配置Elasticsearch地址,也可以在./logstash/logstash.yml中添加全局配置,同时修复日志中license检查报错的问题:
xpack.monitoring.elasticsearch.hosts: ["http://es01:9200"]
内容的提问来源于stack exchange,提问作者redmage123
相关产品推荐
相关产品推荐

