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

Docker Logstash配置自定义ES地址后仍连接默认地址的原因

问题:Logstash配置自定义Elasticsearch地址后仍尝试连接默认地址

我的Logstash配置(Docker环境)

input {
  tcp {
    port => 5000
  }
}

output {
  elasticsearch {
    hosts => ["https://my-custom-elastic.com:9321"]
  }
}

预期行为

Logstash应仅连接至自定义地址https://my-custom-elastic.com:9321,而非默认的http://elasticsearch:9200/。

实际情况

每次启动都会出现如下错误日志:

[2023-08-18T06:11:35,099][INFO ][logstash.licensechecker.licensereader] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://elasticsearch:9200/]}}
[2023-08-18T06:11:35,409][INFO ][logstash.licensechecker.licensereader] Failed to perform request {:message=>"elasticsearch: Name or service not known", :exception=>Manticore::ResolutionFailure, :cause=>java.net.UnknownHostException: elasticsearch: Name or service not known}
[2023-08-18T06:11:35,415][WARN ][logstash.licensechecker.licensereader] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://elasticsearch:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :message=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: Name or service not known"}
[2023-08-18T06:11:35,599][INFO ][logstash.licensechecker.licensereader] Failed to perform request {:message=>"elasticsearch", :exception=>Manticore::ResolutionFailure, :cause=>java.net.UnknownHostException: elasticsearch}

我确认Logstash已加载正确配置,因为报错后不久它确实能连接到预期的自定义地址。请问为何配置了自定义主机后仍尝试连接默认地址?


解决方案

原因分析

错误日志中的logstash.licensechecker.licensereader是Logstash内置的许可证读取器组件(属于X-Pack模块,默认启用),它的作用是连接Elasticsearch获取许可证信息,和你在output块中配置的ES地址相互独立。该组件默认使用http://elasticsearch:9200作为连接地址,因此即使你配置了输出的自定义ES地址,它仍会尝试访问默认地址。

你看到后续Logstash能连接到自定义地址,是因为output插件的连接逻辑正常工作,许可证检查的报错只是组件自身的失败,不会影响日志的正常传输,但会产生冗余错误日志。

解决办法

方法1:指定许可证检查的ES地址

在Logstash的主配置文件logstash.yml中添加以下配置,将许可证读取器指向你的自定义ES地址:

xpack.license.elasticsearch.hosts: ["https://my-custom-elastic.com:9321"]
# 若ES开启了认证,需补充用户名和密码
xpack.license.elasticsearch.username: "你的用户名"
xpack.license.elasticsearch.password: "你的密码"

如果是Docker部署,可以通过环境变量传递配置:

docker run -d \
  -v /path/to/your/logstash/config:/usr/share/logstash/config \
  -e XPACK_LICENSE_ELASTICSEARCH_HOSTS=https://my-custom-elastic.com:9321 \
  -e XPACK_LICENSE_ELASTICSEARCH_USERNAME=你的用户名 \
  -e XPACK_LICENSE_ELASTICSEARCH_PASSWORD=你的密码 \
  docker.elastic.co/logstash/logstash:8.x

方法2:禁用许可证检查(适合测试或无X-Pack需求场景)

如果不需要X-Pack的许可证功能,可以直接禁用该组件:
在logstash.yml中添加:

xpack.license.enabled: false

Docker部署时通过环境变量设置:

docker run -d \
  -v /path/to/your/logstash/config:/usr/share/logstash/config \
  -e XPACK_LICENSE_ENABLED=false \
  docker.elastic.co/logstash/logstash:8.x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:35:13