Zipkin客户端追踪日志无法被Hawkular APM接收问题排查
你的客户端已经能正常生成Zipkin追踪日志,但因为Thrift传输层的异常,导致数据无法被Hawkular APM成功收集。结合你给出的配置和错误日志,我来帮你拆解问题并给出具体的修复方案:
核心问题定位
错误日志里的java.net.SocketException: Socket closed和org.apache.thrift.transport.TTransportException是关键线索:这说明客户端在通过Thrift协议向Hawkular发送Span数据时,连接被主动关闭了。大概率是传输协议配置不匹配或者SSL未正确启用导致的——毕竟你指定了443端口(通常对应HTTPS),但默认的Camel Zipkin客户端并没有开启SSL支持。
具体解决步骤
1. 补充SSL相关配置
既然用了443端口,说明Hawkular的这个端点是HTTPS服务,需要给Camel Zipkin客户端开启SSL,并配置信任凭证(如果用了自签名证书的话)。修改你的application.properties:
camel.zipkin.host-name=hawkular-apm-server.com camel.zipkin.port=443 camel.zipkin.include-message-body-streams=true # 新增SSL启用配置 camel.zipkin.ssl=true # 如果Hawkular使用自签名证书,添加信任库配置(路径和密码根据实际情况调整) camel.zipkin.trust-store=classpath:hawkular-truststore.jks camel.zipkin.trust-store-password=your-truststore-pass
2. 验证Hawkular的Zipkin端点端口
虽然你能正常访问Hawkular的UI,但需要确认它的Zipkin兼容Thrift接收端口是否真的是443。很多Hawkular部署会把Zipkin Thrift服务放在9411端口(Zipkin默认端口),而UI单独用443。你可以先切换到HTTP端口做测试:
camel.zipkin.host-name=hawkular-apm-server.com camel.zipkin.port=9411 camel.zipkin.ssl=false
如果这样调整后能正常收集日志,说明之前的端口或SSL配置就是问题根源。
3. 核对依赖版本兼容性
确保camel-zipkin-starter的版本和你项目中Camel核心版本完全一致。版本不匹配可能会导致Thrift客户端与服务端的协议不兼容,引发传输错误。比如你的Camel核心版本是3.18.x,依赖就应该对应:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-zipkin-starter</artifactId> <version>3.18.6</version> <!-- 和Camel核心版本保持一致 --> </dependency>
4. 确认Hawkular的Zipkin兼容模式已开启
登录Hawkular APM控制台,检查是否启用了Zipkin兼容接收模式。部分部署默认会关闭这个功能,需要在Hawkular的服务配置里设置hawkular-apm.zipkin.enabled=true。
验证修复效果
修改配置后重启客户端,调用你的REST API,查看日志是否还有Thrift相关错误,同时登录Hawkular APM控制台检查是否能看到追踪链路数据。
内容的提问来源于stack exchange,提问作者jack

