docker 部署ELK8.8.1集群 logstash报错PKIX path building failed

elasticsearch 两个节点都配置了SSL,证书配置如下

# 其他信息省略
xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: "/usr/share/elasticsearch/config/http.p12"

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12

elasticsearch docker 运行后正常启动和使用

kibana 配置了SSL和连接elasticsearch的证书

# 其他配置信息省略
# 用HTTPS方式访问kibana
server.ssl.enabled: true
server.ssl.key: /usr/share/kibana/config/kibana-cert/kibana-cert.key
server.ssl.certificate: /usr/share/kibana/config/kibana-cert/kibana-cert.crt
# kibana访问es集群证书
elasticsearch.ssl.certificateAuthorities: /usr/share/kibana/config/elasticsearch-ca.pem

kibana docker 运行后正常启动和使用

下面重点来了
下面重点来了
下面重点来了

给logstash映射的端口在宿主机上都开放了的
logstash.yml 配置如下

node.name: logstash-node-${index} #节点名称,${index}是脚本变量,两个节点,12
http.host: "0.0.0.0" #监听地址
pipeline.workers: 8 #设置output或filter插件的工作线程数
pipeline.batch.size: 125 #设置批量执行event的最大值
pipeline.batch.delay: 5000 #批处理的最大等待值
queue.type: persisted #开启持久化
path.queue: /usr/share/logstash/data #队列存储路径;如果队列类型为persisted,则生效
queue.page_capacity: 250mb #队列为持久化,单个队列大小
queue.max_events: 0 #当启用持久化队列时,队列中未读事件的最大数量,0为不限制
queue.max_bytes: 1024mb #队列最大容量
queue.checkpoint.acks: 1024 #在启用持久队列时强制执行检查点的最大数量,0为不限制
queue.checkpoint.writes: 1024 #在启用持久队列时强制执行检查点之前的最大数量的写入事件,0为不限制
queue.checkpoint.interval: 1000 #当启用持久队列时,在头页面上强制一个检查点的时间间隔
xpack.monitoring.enabled: true  #开启logstash指标监测,将指标数据发送到es集群
xpack.monitoring.elasticsearch.hosts: ["https://192.168.2.202:9201","https://192.168.2.202:9202"]
xpack.monitoring.elasticsearch.username: "logstash_system"
xpack.monitoring.elasticsearch.password: "EjRJ8hLgPj3GrViQmYxm"
xpack.monitoring.elasticsearch.ssl.certificate_authority: /usr/share/logstash/config/elasticsearch-ca.pem

logstash.conf 这个文件配不配置都报一样的错误,下面还是贴上配置信息

input {
  beats {
    host => "0.0.0.0"
    port => 5044
    codec => plain {
      charset => "UTF-8"
    }
    ssl => true
    ssl_certificate_authorities => ["/usr/share/logstash/config/elasticsearch-ca.pem"]
    ssl_certificate => "/usr/share/logstash/config/logstash-cert/logstash-cert.crt"
    ssl_key => "/usr/share/logstash/config/logstash-cert/logstash-cert.pkcs8.key"
    ssl_verify_mode => "force_peer"
  }
}
 
filter {
  json {
    source => "message"
  }
}
 
output{
  if "nginx-access-log-dev-202" in [tags] {
    elasticsearch {
      hosts => ["https://192.168.2.202:9201","https://192.168.2.202:9202"]
      #action => "index"
      # 写入到es中的索引
      index => "nginx-access-log-dev-202-%{+YYYY.MM.dd}"
      user => logstash_writer
      password => HgYuHIKu77Ber66
      ssl => true
      truststore => "/usr/share/logstash/config/elasticsearch-ca.pem"
    }
  }
 
  if "nginx-error-log-dev-202" in [tags] {
    elasticsearch {
      hosts => ["https://192.168.2.202:9201","https://192.168.2.202:9202"]
      #action => "index"
      # 写入到es中的索引
      index => "nginx-error-log-dev-202-%{+YYYY.MM.dd}"
      user => logstash_writer
      password => HgYuHIKu77Ber66
      ssl => true
      ssl_certificate_verification => true
      truststore => "/usr/share/logstash/config/elasticsearch-ca.pem"
    }
  }
}

logstash docker运行报错如下

[2023-08-02T03:27:14,437][WARN ][logstash.licensechecker.licensereader] Marking url as dead. Last error: [LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError] Elasticsearch Unreachable: [https://192.168.2.202:9201/_xpack][Manticore::ClientProtocolException] PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target {:url=>https://logstash_kibana:xxxxxx@192.168.2.202:9201/, :error_message=>"Elasticsearch Unreachable: [https://192.168.2.202:9201/_xpack][Manticore::ClientProtocolException] PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", :error_class=>"LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError"}
[2023-08-02T03:27:14,480][ERROR][logstash.licensechecker.licensereader] Unable to retrieve license information from license server {:message=>"No Available connections"}
[2023-08-02T03:27:14,494][ERROR][logstash.configmanagement.elasticsearchsource] Failed to fetch X-Pack information from Elasticsearch. This is likely due to failure to reach a live Elasticsearch cluster.

异常看似说的很清楚,没有找到证书。
说明一下elasticsearch-ca.pem是和http.p12一起生成的命令是./bin/elasticsearch-certutil http

下面说一下排除过程的一些信息:
第一种、
首先查看了证书文件的权限,我授权的是777,然后进入docker容器内部查看配置文件中是否配置了证书以及验证配置文件中证书的目录位置是否存在,经过检查都没有问题,就是识别不了证书文件

第二种、
经过第一种排查,我以为证书格式的问题,我从*.p12证书 改为了 ca.crt证书,
logstash.yml配置中证书更改为:xpack.monitoring.elasticsearch.ssl.certificate_authority: "/usr/share/logstash/config/escert/ca.crt"
启动后还是报错,依然进入容器查看了配置路径这些,都没有问题

第三种、
将ca证书生成出pem证书配置到xpack.monitoring.elasticsearch.ssl.certificate_authority: "/usr/share/logstash/config/escert/ca.crt",结果和前面一样。

经过几天的折腾,重装了无数次,各种姿势都用了,就是报前面的错,跑不起来。

下面贴出爬坑过程中用过的配置信息
配置1:

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: ["https://es01:9200","https://es02:9200","https://es03:9200"]
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.sniffing: false
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: CFGyTv55yg6
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/usr/share/logstash/config/escert/ca.crt"
path.config: /usr/share/logstash/config/conf.d/*.conf
path.logs: /usr/share/logstash/logs

配置2:
如果像下面这样配置,关闭监测,就会报新的错误

node.name: logstash-node-${index} #节点名称,另外两个节点取名logstash-2、logstash-3
pipeline.workers: 2 #设置output或filter插件的工作线程数
pipeline.batch.size: 125 #设置批量执行event的最大值
pipeline.batch.delay: 5000 #批处理的最大等待值
queue.type: persisted #开启持久化
path.queue: /usr/share/logstash/data #队列存储路径;如果队列类型为persisted,则生效
queue.page_capacity: 250mb #队列为持久化,单个队列大小
queue.max_events: 0 #当启用持久化队列时,队列中未读事件的最大数量,0为不限制
queue.max_bytes: 1024mb #队列最大容量
queue.checkpoint.acks: 1024 #在启用持久队列时强制执行检查点的最大数量,0为不限制
queue.checkpoint.writes: 1024 #在启用持久队列时强制执行检查点之前的最大数量的写入事件,0为不限制
queue.checkpoint.interval: 1000 #当启用持久队列时,在头页面上强制一个检查点的时间间隔
xpack.monitoring.enabled: false  #开启logstash指标监测,将指标数据发送到es集群

错误如下 10s报一次

[2023-08-02T03:55:23,738][INFO ][org.logstash.beats.BeatsHandler][main][0710cad67e8f47667bc7612580d5b91f691dd8262a4187d9eca8cf87229d04aa] [local: 172.66.0.152:5044, remote: 192.168.2.202:47610] Handling exception: io.netty.handler.codec.DecoderException: org.logstash.beats.InvalidFrameProtocolException: Invalid version of beats protocol: 3 (caused by: org.logstash.beats.InvalidFrameProtocolException: Invalid version of beats protocol: 3)
[2023-08-02T03:55:23,739][WARN ][io.netty.channel.DefaultChannelPipeline][main][0710cad67e8f47667bc7612580d5b91f691dd8262a4187d9eca8cf87229d04aa] An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.

配置3:
关闭监测,配置集中管理配置,依然报最前面那个异常,找不到证书

http.host: "0.0.0.0"
path.logs: /usr/share/logstash/logs
xpack.monitoring.enabled: false
xpack.management.enabled: true
xpack.management.pipeline.id: ["main", "apache_logs", "my_apache_logs"]
xpack.management.elasticsearch.hosts: ["https://192.168.2.202:9201","https://192.168.2.202:9202"]
xpack.management.elasticsearch.username: "logstash_kibana"
xpack.management.elasticsearch.password: "HgYuHIKu77Ber67"
xpack.management.elasticsearch.ssl.certificate_authority: /usr/share/logstash/config/elasticsearch-ca.pem

实在不知道说明原因,有没有大能可以解救下呀。
万分感激
万分感激
万分感激

如果可以解决问题,可谈
如果可以解决问题,可谈
如果可以解决问题,可谈

Logstash报错 "PKIX path building failed",一般是由于证书验证问题引起的。

引用chatgpt内容作答:
检查了您的配置,并发现了一些问题:

1、在Logstash输出配置中,您使用了truststore选项,但这个选项并不存在于Elasticsearch输出插件中。应该移除这个选项。输出插件中只需要指定ssl_certificate_authorities选项,就能够验证Elasticsearch的SSL证书。

2、您在Logstash配置中指定了xpack.monitoring.elasticsearch.ssl.certificate_authority选项,但您在实际的输出配置中却使用了ssl_certificate_authorities选项。这两者应该保持一致,使用ssl_certificate_authorities即可。

根据您提供的配置,以下是已更新的Logstash输出配置:

output {
  if "nginx-access-log-dev-202" in [tags] {
    elasticsearch {
      hosts => ["https://192.168.2.202:9201","https://192.168.2.202:9202"]
      index => "nginx-access-log-dev-202-%{+YYYY.MM.dd}"
      user => logstash_writer
      password => HgYuHIKu77Ber66
      ssl => true
      ssl_certificate_authorities => ["/usr/share/logstash/config/elasticsearch-ca.pem"]
    }
  }

  if "nginx-error-log-dev-202" in [tags] {
    elasticsearch {
      hosts => ["https://192.168.2.202:9201","https://192.168.2.202:9202"]
      index => "nginx-error-log-dev-202-%{+YYYY.MM.dd}"
      user => logstash_writer
      password => HgYuHIKu77Ber66
      ssl => true
      ssl_certificate_authorities => ["/usr/share/logstash/config/elasticsearch-ca.pem"]
    }
  }
}

更正后,重新启动Logstash容器,并再次检查日志以查看是否仍然存在错误。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    我很抱歉,但是目前没有看到问题的具体内容。请您提供具体的问题,我将竭诚为您提供解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

哥们,给你提醒一下,发问题尽量不要把你的敏感信息都发出来,例如ip,es的username和 password这些敏感信息还是过滤一下,以防万一!!!

这个文章参考一下:


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

是软件的问题吗? 试着换软件尝试

Docker部署ELK
有详细的步骤,可以按着来


Docker-Compose部署ELK_docker-compose elk_Troubleyoung@007的博客-CSDN博客 Docker-Compose部署ELK_docker-compose elk https://blog.csdn.net/weixin_44359151/article/details/129341044

看了你的报错,两个问题 1.无法找到到请求目标的有效证书路径,2.降版本的话报错显示beats协议的无效版本
你试着使用elasticsearch-certutil cert命令生成传输层证书和CA证书,或者使用elasticsearch-certutil ca命令生成CA证书,然后使用elasticsearch-certutil cert --ca命令生成传输层证书,其次将生成的传输层证书和CA证书复制到logstash的配置目录下,然后在logstash.yml配置文件中,添加output.elasticsearch.ssl.certificate_authority参数,并指定CA证书的路径,重启logstash和elasticsearch服务,看下是否正常

Elasticsearch Unreachable,说明Logstash无法访问Elasticsearch集群。看下Elasticsearch集群的IP地址和端口号正确,并且Logstash和Elasticsearch之间的网络连接是可用的。
PKIX path building failed,这是说Logstash无法验证Elasticsearch的证书,因此无法建立安全的连接。检查Elasticsearch的证书是否有效,并确保Logstash可以访问该证书。

以下内容引用自GPT:
根据你提供的信息,logstash配置的SSL证书相关参数如下:

ssl => true
ssl_certificate_authorities => ["/usr/share/logstash/config/elasticsearch-ca.pem"]
ssl_certificate => "/usr/share/logstash/config/logstash-cert/logstash-cert.crt"
ssl_key => "/usr/share/logstash/config/logstash-cert/logstash-cert.pkcs8.key"
ssl_verify_mode => "force_peer"

同时,logstash访问elasticsearch的配置如下:

hosts => ["https://192.168.2.202:9201","https://192.168.2.202:9202"]
ssl => true
truststore => "/usr/share/logstash/config/elasticsearch-ca.pem"

根据报错信息,看起来logstash无法识别证书。以下是一些可能的解决办法:

1.检查证书文件权限:确保证书文件的权限正确设置。可以尝试将证书文件的权限设置为400或600,以确保只有 logstash 用户可以读取该文件。

2.检查证书文件路径:验证证书文件路径是否正确。检查 logstash 配置文件中证书文件的路径是否与实际路径匹配。如果使用 Docker 运行 logstash,请确保容器内的路径与宿主机上的路径相匹配。

3.验证证书文件格式:使用 openssl 命令验证证书文件的格式是否正确。例如,使用命令 openssl x509 -in <证书文件路径> -text -noout 可以查看证书文件的详细信息。确保证书文件的格式与 logstash 配置文件中所期望的格式一致。

4,重新生成证书文件:如果确认证书文件的格式或路径有问题,可以尝试重新生成证书文件,并将其用于 logstash 的配置。确保使用有效的证书生成步骤和工具来生成证书文件。根据你提供的信息,可以尝试使用命令 ./bin/elasticsearch-certutil http 重新生成证书文件。

5.检查防火墙设置:验证防火墙设置是否允许 logstash 容器与 Elasticsearch 服务器之间的通信,并且所需的端口是否已经打开。保证容器内外的通信端口是开放的。

6.检查 Elasticsearch 日志文件:查看 Elasticsearch 服务器的日志文件,检查是否有关于证书的错误或警告信息。日志文件通常会提供更详细的问题描述和解决方法。

如果之前的解决方法都尝试过了也没有找到额外的解决方法,你可以尝试以下方法来解决 logstash 配置 SSL 证书连接 Elasticsearch 的问题:

  1. 检查 Elasticsearch 集群状态:确保 Elasticsearch 集群正常运行且可访问。可以使用 curl 或浏览器访问 Elasticsearch 的 health API (http://<elasticsearch-host>:<port>/_cluster/health) 来验证集群是否可用。如果 Elasticsearch 集群无法访问或出现其他问题,可能会导致 logstash 无法与之建立 SSL 连接。

  2. 检查 logstash 配置文件:仔细检查 logstash 的配置文件,确保所有的 SSL 相关配置项都正确设置。包括证书文件路径、私钥文件路径、CA 证书路径等。确保这些路径是正确的,并且文件也存在于相应的位置。

  3. 检查 SSL 配置项:在 logstash 配置文件中,确保 SSL 相关的配置项正确设置。例如,确认 ssl 设置为 truessl_certificate_verification 设置为 truefalse(根据你的需求决定是否验证证书)。另外,确保 ssl_certificatessl_key 配置项分别指向正确的证书文件和私钥文件。

  4. 检查连接参数:检查 logstash 配置文件中的连接参数是否正确。包括 Elasticsearch 的 URL、端口、用户名和密码等连接参数。确保这些参数正确匹配 Elasticsearch 服务器的设置。

  5. 日志调试:启用 logstash 的调试模式,以便查看更详细的错误消息和故障排除信息。在 logstash 的配置文件中,将 --log.level 设置为 debug 可以启用调试模式。检查 logstash 的日志输出,以便查看是否有关于 SSL 连接问题的错误或警告信息。

如果尝试了这些方法之后问题仍然存在,建议向 logstash 的社区或论坛寻求帮助。在这些地方,你可以与其他用户和开发者讨论你的问题,并获取更多的支持和解决方法。

证书验证未成功

参考newbing
在部署ELK 8.8.1集群时,你遇到了"PKIX path building failed"的错误,这通常意味着在尝试连接Elasticsearch时出现了SSL证书验证问题。

确认证书:首先,请确保你使用的Elasticsearch证书是有效的,并且可以在你的Logstash机器上访问。你可以通过在Logstash机器上尝试使用curl或其他工具来测试连接和证书的有效性。
更新Logstash配置:检查你的Logstash配置文件(通常是logstash.conf),确保正确配置了Elasticsearch的地址和端口。确保使用了正确的协议(例如https)和正确的证书路径(如果需要)。
确认防火墙设置:确保Logstash机器和Elasticsearch机器之间的网络通信没有被防火墙阻止。请检查任何可能阻止连接的网络或安全组设置。
版本兼容性:确认Logstash和Elasticsearch的版本是相互兼容的。确保你使用的是同一版本或相互兼容的版本。
检查网络连接:确保Logstash机器和Elasticsearch机器之间的网络连接是可靠的。可以尝试使用ping命令来测试网络连接。

验证不了证书导致的

原因

1、一般是信任证书或者证书路径的问题,但看你的描述,这两种你都反复测试过了

2、那么看起来更像是插件或者版本的问题导致的了,一般最新版本的可能会有兼容错误,尝试降低一个版本使用它

解决方法

1、再次检查下 证书的路径字段 (不得不说,大多数证书无法识别最后发现还是路径错了个字母)

2、如果确切要求ELK8.8.1的话,尝试下这个方法:

更新logstash-output-elasticsearch插件应该11.15.8可以解决问题

答案源自于这个Issure:

再或者试下Issure里面的这个方法:

如果前两个办法都无法解决问题的话,那么尝试下第三个方法

3、减低ELK8.8.1 到 ELK8.7.1,(如果你对于ELK8.8.1没什么强烈要求的话)然后重新启动看下是否正常。


如有问题及时沟通~

如果都无法解决的话,方便的话发下你的所有版本信息,我抽空本地测试跑下试下

已经正确配置了Elasticsearch和Kibana的SSL证书,并且在Logstash中正确配置了与Elasticsearch的连接。然而,您遇到了一个问题,可能是由于以下原因之一:

Logstash无法连接到Elasticsearch集群。这可能是由于以下原因之一:

Elasticsearch集群的证书配置不正确。请确保您在Logstash中正确配置了Elasticsearch集群的证书路径和相关选项。
Elasticsearch集群的证书不被信任。请确保您的证书是有效和受信任的,并且已经在Logstash中正确配置。
Logstash无法连接到Elasticsearch集群的任何节点。请确保您在Logstash配置中正确指定了Elasticsearch集群的各个节点,并且这些节点可以通过SSL连接。
Logstash自身的证书配置不正确。请确保您在Logstash配置中正确配置了Logstash自身的证书路径和相关选项。

为了解决这个问题,您可以尝试以下步骤:

检查证书配置:确保您在Elasticsearch、Kibana和Logstash中正确配置了证书路径和相关选项。确保证书是有效和受信任的,并且与主机名匹配。
检查网络连接:确保Logstash可以连接到Elasticsearch集群的各个节点,并且可以使用SSL进行连接。
检查Logstash配置:确保您在Logstash配置中正确指定了Elasticsearch集群的各个节点,并且这些节点可以通过SSL连接。
排除其他问题:如果问题仍然存在,您可以尝试排除其他可能的问题,例如防火墙设置、网络连接问题等。
根据您提供的配置和错误信息,有几个可能的原因和解决方法:

证书路径不正确:请确保您在 Logstash 配置中正确指定了 Elasticsearch 集群的证书路径。确保路径是绝对路径,并且证书文件存在并且具有正确的权限。
Elasticsearch 集群的证书不受信任:请确保您的 Elasticsearch 集群使用的证书是受信任的。您可以尝试导入证书到您的操作系统或 CA 的信任链中,或者在 Logstash 配置中指定信任的证书颁发机构(CA)。
网络连接问题:请确保 Logstash 可以连接到 Elasticsearch 集群。尝试通过命令行或其他工具测试连接性。
SSL 配置问题:请确保您在 Logstash 配置中正确配置了 SSL。您可以尝试启用更详细的的安全性配置,例如 ssl_certificate_verification 和 truststore。
Logstash 版本问题:请确保您使用的的是与 Elasticsearch 和 Kibana 兼容的 Logstash 版本。不兼容的版本可能导致配置问题和错误。
尝试以上解决方法,并检查配置和网络连接是否正确。如果问题仍然存在,请提供更多详细信息,例如 Logstash 的错误消息、日志文件等,以便更好地理解问题并为您提供更准确的解决方案。

这通常表明 SSL/TLS 证书存在问题。
可以尝试执行以下几个步骤来解决该问题:

  1. 检查证书有效性:确保Logstash使用的SSL/TLS证书有效且可信。确保它们未过期并且由受信任的证书颁发机构 (CA) 颁发。
  2. 导入CA证书:如果证书是自签名的或由私有CA颁发的,可能需要将CA证书导入到Logstash使用的Java密钥库中。可以使用“keytool”命令导入证书。
  3. 验证证书链:确保证书链配置正确并包含所有必要的中间证书。如果缺少任何中间证书,Logstash 可能无法构建信任路径。
  4. 检查密钥库和信任库配置:验证 Logstash 配置是否指定了正确的密钥库和信任库路径。确保配置文件中正确引用了证书。
  5. 禁用证书验证(不建议用于生产):作为临时解决方法,可以通过在 Logstash 配置中将 ssl_certificate_verification 设置为 false 来禁用 Logstash 中的证书验证。但是,不建议在生产环境中这样做。
    通过执行这些步骤,应该能够在使用 Docker 部署 ELK 8.8.1 集群时排查并解决 Logstash 中的“PKIX 路径构建失败”错误。

在部署 ELK 8.8.1 集群时,遇到了 logstash 报错 "PKIX path building failed" 的问题。这个错误通常是由于 SSL/TLS 证书问题引起的。

PKIX 是 Public Key Infrastructure X.509(也称为 PKI X.509),是一种公钥基础设施协议,用于管理数字证书和公钥基础结构,以提供信息安全服务。

在 SSL/TLS 通信中,客户端和服务器之间进行握手,协商使用加密算法和证书验证方式,确认身份并建立安全通信。如果证书无效或不受信任,就会出现 "PKIX path building failed" 错误。

解决这个问题需要以下步骤:

  1. 检查证书是否有效并已经信任:确认证书是否已正确安装并通过证书颁发机构(CA)验证。可以使用 openssl 命令检查证书是否有效以及是否与 CA 颁发的一致。如果证书无效或不受信任,请重新生成或重新颁发证书并将其正确安装。

  2. 配置 logstash 的 SSL/TLS:在 logstash 的配置文件中,确保已正确配置 SSL/TLS 证书和密钥,并设置正确的验证方式和协议。可以使用 openssl 命令测试 SSL/TLS 连接是否正常运行。如果出现任何问题,请检查配置文件中的错误和拼写错误。

  3. 检查 logstash 安装和配置:确认 logstash 已正确安装并配置,特别是与 SSL/TLS 相关的设置。可以尝试重新安装和配置 logstash,并确保在部署集群时使用相同的配置文件。

  4. 检查网络设置:确认网络设置和防火墙配置是否正确,确保 logstash 可以正常连接其他 ELK 集群组件。可以使用 telnet 命令测试网络连接是否正常运行,并尝试暂时禁用防火墙以验证是否是防火墙阻止了连接。

总之, "PKIX path building failed" 是一个比较常见的 SSL/TLS 证书问题,可能由多种因素引起。需要仔细检查 logstash 的配置文件,检查证书的有效性和受信任状态,并验证网络连接和防火墙配置是否正确。通过逐步排除问题,最终可以解决这个问题。

当在Docker中部署ELK 8.8.1集群时,如果Logstash出现"PKIX path building failed"错误,意味着在与外部系统建立SSL连接时存在证书验证问题。可以尝试以下几个解决方案:

配置信任的根证书:确保将要连接的外部系统的根证书添加到Logstash容器中。可以将证书文件挂载到Docker容器内部,然后在Logstash配置文件(logstash.yml)中进行相关配置。

xpack.monitoring.elasticsearch.ssl.certificate_authority: "/path/to/certificate.crt"

确保将/path/to/certificate.crt替换为实际证书文件的路径。

忽略证书验证(仅限于测试环境):如果使用自签名证书或测试环境中的临时证书,可以在Logstash配置文件中添加以下配置,以忽略证书验证。

xpack.monitoring.elasticsearch.ssl.verification_mode: none

这样 Logstash 将不再验证 SSL 证书的有效性。请注意,在生产环境中不推荐使用此选项,因为它会带来安全风险。

更新Java的证书信任库:在某些情况下,可能需要更新Docker容器中OpenJDK使用的证书信任库。可以使用以下命令将外部证书复制到容器的信任库中:

COPY /path/to/certificate.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates

这样可以确保Docker容器中的Java信任库包含所需的根证书。

请根据您的实际情况选择适合的解决方案。同时,请确保您具有足够的权限和合法性来使用相关证书。