从JaegerExporter迁移至OTLPTraceExporter后无追踪数据求助
从JaegerExporter迁移到OTLPTraceExporter无追踪数据的排查方案
以下是针对你遇到的问题的具体排查和解决步骤:
1. 核心问题:端点路径不兼容
JaegerExporter和OTLPTraceExporter使用的端点路径完全不同,不能直接复用原来的Jaeger endpoint:
- 旧JaegerExporter的默认端点是:
http://<jaeger-host>:14268/api/traces - OTLPTraceExporter(HTTP协议)需要的是Jaeger的OTLP HTTP接收端点:
http://<jaeger-host>:4318/v1/traces - 如果用gRPC协议,端点是:
http://<jaeger-host>:4317(无需后缀路径)
先确认你的process.env.JAEGER_ENDPOINT是不是换成了正确的OTLP端点,这是最常见的问题。
2. 确认OTLP导出器的依赖包和协议类型
OTLP导出器分HTTP和gRPC两个独立包,要确保安装了对应依赖:
- HTTP协议:安装
@opentelemetry/exporter-trace-otlp-http - gRPC协议:安装
@opentelemetry/exporter-trace-otlp-grpc
并且配置要对应协议:
// HTTP协议示例 import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; const traceExporter = new OTLPTraceExporter({ url: 'http://jaeger:4318/v1/traces', // 必须带/v1/traces路径 }); // gRPC协议示例 import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'; const traceExporter = new OTLPTraceExporter({ url: 'http://jaeger:4317', // 不带路径 });
3. 开启调试日志排查错误
添加OTel的调试日志,能直接看到导出过程中的报错(比如连接失败、请求被拒绝、格式错误等):
import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api'; // 在初始化Tracer之前开启调试日志 diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
4. 检查Jaeger服务的OTLP接收配置
确保Jaeger服务已经启用了OTLP接收端口:
- 默认gRPC端口:4317
- 默认HTTP端口:4318
如果用Docker启动Jaeger,要映射这两个端口:
docker run -d --name jaeger \ -p 4317:4317 \ -p 4318:4318 \ -p 16686:16686 \ jaegertracing/all-in-one:latest
5. NestJS专属检查项
- 确保在NestJS的
bootstrap函数最开头启动Tracer,避免 instrumentation 加载不完整:
async function bootstrap() { // 先启动Tracer await Tracer.start(); const app = await NestFactory.create(AppModule); // ...其他应用配置 await app.listen(3000); } bootstrap();
- 确认
getNodeAutoInstrumentations()的版本和OTel核心包版本兼容,避免版本不匹配导致的 instrumentation 失效。
6. 验证环境变量正确性
打印process.env.JAEGER_ENDPOINT的值,确认它确实是你配置的OTLP端点,避免环境变量未正确加载或拼写错误。
内容的提问来源于stack exchange,提问作者Tim Holum
相关产品推荐
相关产品推荐

