Logstash同步MSSQL至Elasticsearch失败:证书路径验证错误
解决Logstash连接Elasticsearch 8.3.3的PKIX证书验证错误
错误原因
Elasticsearch 8.x默认启用HTTPS加密通信,Logstash运行依赖的JVM信任库中未包含Elasticsearch的CA证书,导致SSL证书验证失败,抛出PKIX path building failed错误。
解决方案
1. 测试环境:临时禁用SSL证书验证(生产环境不推荐)
在Logstash配置的elasticsearch输出块中添加参数关闭证书验证,同时补充Elasticsearch 8.x默认要求的账号密码:
output { elasticsearch { hosts => ["https://localhost:9200/"] index => "users_test" # 禁用证书验证(仅测试场景使用) ssl_verification_mode => "none" # Elasticsearch 8.x默认开启认证,需填写对应账号密码 user => "elastic" password => "你的Elasticsearch密码" } }
2. 生产环境:导入Elasticsearch CA证书到Logstash信任库
步骤1:获取CA证书
Elasticsearch安装后,默认在config/certs目录下存在http_ca.crt文件,将该文件复制到Logstash可访问的路径。
步骤2:导入证书到Logstash的JVM信任库
打开命令提示符,执行keytool命令(路径需匹配你的Logstash安装目录):
keytool -importcert -file "D:\your-path\http_ca.crt" -alias elasticsearch -keystore "C:\Program Files\Elastic\Logstash\jdk\lib\security\cacerts"
- 默认信任库密码为
changeit,按提示输入并确认完成导入。
步骤3:可选:配置自定义信任库
若不想修改默认系统信任库,可在Logstash配置中指定自定义信任库路径:
output { elasticsearch { hosts => ["https://localhost:9200/"] index => "users_test" user => "elastic" password => "你的Elasticsearch密码" # 指定自定义信任库文件路径 truststore_path => "D:\your-path\custom-truststore.jks" truststore_password => "你的信任库密码" } }
额外优化提示
当前配置仅会执行一次全量查询,若要实现实时增量同步,需为JDBC输入添加定时调度和增量追踪配置:
input { jdbc { jdbc_driver_library => "D:\sqljdbc_12.2.0.0_enu\sqljdbc_12.2\enu\mssql-jdbc-12.2.0.jre8.jar" jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver" jdbc_connection_string => "jdbc:sqlserver://<dbpath>/<dbname>" jdbc_user => <db_userid> jdbc_password => <db_passwd> # 增量查询语句,需确保Users表有更新时间字段(如last_updated) statement => "SELECT * FROM Users WHERE last_updated >= :sql_last_value" # 每分钟执行一次同步 schedule => "* * * * *" use_column_value => true tracking_column => "last_updated" tracking_column_type => "timestamp" } }
内容的提问来源于stack exchange,提问作者Whereismywall
相关产品推荐
相关产品推荐

