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

Docker-Compose部署Logstash出现HostUnreachableError问题求助

问题描述

运行docker-compose -f .\docker-compose.yml up -d启动Logstash后,日志抛出SSL证书信任错误:

Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[https://my-user-login:myPassword@myhost.ca:9200/]}}

2023-05-11 10:58:13 14:58:13.525 [LogStash::Runner] WARN logstash.licensechecker.licensereader - Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"https://my-user-login:myPassword@myhost.ca:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [https://my-user-login:myPassword@myhost.ca:9200/][Manticore::ClientProtocolException] PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"}

核心原因是Logstash的Java运行环境未信任目标Elasticsearch服务器的SSL证书,导致无法建立安全连接。


解决方案

方法1:导入Elasticsearch证书到Logstash信任存储(生产环境推荐)

步骤1:获取Elasticsearch服务器证书

通过openssl从目标ES服务器导出证书:

# 替换为你的ES主机地址和端口
echo -n | openssl s_client -connect myhost.ca:9200 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > es_certificate.crt

步骤2:挂载证书到Logstash容器

在项目根目录下创建logstash/certs文件夹,将下载的es_certificate.crt放入其中。

步骤3:修改docker-compose.yml

在logstash服务的volumes节点新增证书挂载配置:

services:
  logstash:
    # ... 其他配置不变
    volumes:
      # ... 原有挂载项
      - ./logstash/certs:/usr/share/logstash/certs

步骤4:配置Logstash使用信任证书

  1. 修改logstash.conf的output段,添加证书路径:
output {
  elasticsearch {
    hosts => "${ELASTICSEARCH_HOST}"
    user => "${ELASTICSEARCH_USERNAME}"
    password => "${ELASTICSEARCH_PASSWORD}"
    index => "sample_csv-%{+YYYY.MM.dd}"
    cacert => "/usr/share/logstash/certs/es_certificate.crt"
  }
}
  1. 修改logstash.yml,添加监控模块的证书配置:
xpack.monitoring.elasticsearch.ssl.certificate_authorities: ["/usr/share/logstash/certs/es_certificate.crt"]

步骤5:重启Logstash

docker-compose down && docker-compose up -d

方法2:临时禁用SSL证书验证(仅测试环境)

注意:此方法会跳过证书校验,存在安全风险,禁止用于生产环境

  1. 修改logstash.conf的output段:
output {
  elasticsearch {
    hosts => "${ELASTICSEARCH_HOST}"
    user => "${ELASTICSEARCH_USERNAME}"
    password => "${ELASTICSEARCH_PASSWORD}"
    index => "sample_csv-%{+YYYY.MM.dd}"
    ssl_verification_mode => "none"
  }
}
  1. 修改logstash.yml的监控配置:
xpack.monitoring.elasticsearch.ssl.verification_mode: none
  1. 重启Logstash服务。

额外检查项

  • 确认Logstash容器能访问到Elasticsearch主机:
# 替换为你的Logstash容器名称
docker exec -it <logstash-container-name> ping myhost.ca
docker exec -it <logstash-container-name> curl -v https://myhost.ca:9200
  • 验证.env文件中ELASTICSEARCH_HOST为完整HTTPS地址(格式如https://myhost.ca:9200)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:27:45