OTLP Collector对接Jaeger遇TLS握手失败及配置咨询
问题解决:OTLP Collector TLS握手失败及跨服务器部署配置
错误原因
你遇到的 tls: first record does not look like a TLS handshake 错误核心原因是:Jaeger all-in-one镜像默认的4317端口(OTLP gRPC接收端)是明文传输,未启用TLS,但你的OTLP Collector导出端配置了tls: insecure: false,强制要求TLS连接,两边协议不匹配导致握手失败。
核心解决方案:修正OTLP导出端配置
直接将Collector的OTLP导出端TLS配置改为明文模式,匹配Jaeger默认设置:
exporters: otlp: endpoint: "jaegersite.com:4317" tls: insecure: true # 关键:禁用TLS,使用明文gRPC连接Jaeger默认端口 debug: verbosity: detailed
注:
insecure_skip_verify: true是用于跳过TLS证书验证的参数,前提是对方启用了TLS;而Jaeger默认4317端口根本没开TLS,所以必须设置insecure: true。
跨服务器部署全流程配置要点
1. 业务应用端(第一台服务器)
- 配置应用的OTLP导出器,指向Collector服务器的IP/域名:
- 若用gRPC协议:目标地址为
collector-server-ip:4317 - 若用HTTP协议:目标地址为
http://collector-server-ip:4318/v1/traces
- 若用gRPC协议:目标地址为
- 确保应用服务器的防火墙/安全组允许访问Collector的4317/4318端口
2. OTLP Collector端(第二台服务器)
- 接收端配置保持现有即可,
0.0.0.0:4317表示监听所有网卡,支持跨服务器接收数据:receivers: otlp: protocols: http: grpc: endpoint: "0.0.0.0:4317" - 若需要给应用→Collector的传输加密,可给Collector的接收端添加TLS配置:
此时应用端需配置信任Collector的证书,或临时启用跳过验证(仅测试环境)。receivers: otlp: protocols: http: tls: cert_file: "/etc/otelcol-contrib/certs/server.crt" key_file: "/etc/otelcol-contrib/certs/server.key" grpc: endpoint: "0.0.0.0:4317" tls: cert_file: "/etc/otelcol-contrib/certs/server.crt" key_file: "/etc/otelcol-contrib/certs/server.key" - 确保Collector服务器的4317/4318端口对外开放,允许应用服务器IP访问
3. Jaeger端(第三台服务器)
- 现有启动命令已正确暴露4317/4318端口,无需修改;确保Jaeger服务器的4317端口对外开放,允许Collector服务器IP访问
- 若需给Jaeger的OTLP接收端启用TLS(生产环境加密需求),需修改启动命令添加TLS参数:
同时Collector的导出端需配置:docker run -d --name jaeger \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14250:14250 \ -p 14268:14268 \ -p 14269:14269 \ -p 4317:4317 \ -p 4318:4318 \ -p 9411:9411 \ -v /path/to/jaeger/certs:/certs \ jaegertracing/all-in-one:1.52 \ --otlp-grpc.tls.enabled=true \ --otlp-grpc.tls.cert-file=/certs/jaeger.crt \ --otlp-grpc.tls.key-file=/certs/jaeger.keyexporters: otlp: endpoint: "jaegersite.com:4317" tls: insecure: false insecure_skip_verify: true # 自签名证书测试用,生产环境需配置ca_file
额外排查步骤
- 在Collector服务器上测试Jaeger连通性:执行
grpcurl -plaintext jaegersite.com:4317 list,若返回服务列表则连通正常 - 检查三台服务器的防火墙/安全组规则,确保对应端口的入站/出站权限开放
- 验证Docker端口映射:Collector的Compose文件和Jaeger的启动命令已正确映射端口,无需调整
内容的提问来源于stack exchange,提问作者pradeep
相关产品推荐
相关产品推荐

