Logstash Kafka输入配置中ssl_keystore_location设置不生效显示为null的问题排查
从你提供的Logstash配置和消费者日志来看,核心问题出在SSL协议未启用,导致你配置的SSL密钥库/信任库路径没有被加载到Kafka消费者配置中。
关键原因
你的Kafka输入配置中缺少了security_protocol参数,默认情况下Logstash Kafka插件会使用PLAINTEXT作为安全协议。当安全协议为PLAINTEXT时,Kafka客户端会完全忽略所有SSL相关的配置项,所以你设置的ssl_keystore_location和ssl_truststore_location不会被传递到消费者配置里,最终显示为null。
修复步骤
添加安全协议配置
在你的Kafka input块中加入security_protocol => "SSL"(如果你的MSK集群使用的是SASL_SSL认证,则改为"SASL_SSL"),这样SSL相关参数才会被生效。修改后的配置如下:input { kafka { bootstrap_servers => "my-aws-msk.kafka.us-east-1.amazonaws.com:9092" topics => ["agg_events"] group_id => "agg-logstash-consumer" consumer_threads => 2 security_protocol => "SSL" # 启用SSL协议 ssl_keystore_location => "/tmp/kafka.client.truststore.jks" ssl_truststore_location => "/tmp/kafka.client.truststore.jks" # 如果密钥库/信任库设置了密码,需要补充以下参数 # ssl_keystore_password => "your-keystore-password" # ssl_truststore_password => "your-truststore-password" } }验证文件权限与存在性
确保/tmp/kafka.client.truststore.jks文件确实存在,并且Logstash运行用户(通常是logstash用户)拥有读取该文件的权限。可以通过以下命令检查:sudo -u logstash ls -l /tmp/kafka.client.truststore.jks如果文件不存在,需要重新生成或复制正确的信任库文件;如果权限不足,调整文件权限为
logstash用户可读。重启Logstash并验证
重启Logstash服务后,查看消费者配置日志,此时ssl.keystore.location和ssl.truststore.location应该会显示你配置的路径,而不是null。
额外说明
Logstash Kafka插件的参数采用下划线分隔命名(如security_protocol),对应Kafka原生消费者的点分隔参数(如security.protocol)。只有当安全协议设置为SSL或SASL_SSL时,SSL相关的配置项才会被Kafka客户端初始化和使用。
内容的提问来源于stack exchange,提问作者ferrari16

