You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Go-kit中桥接OpenTracing到OpenTelemetry遇导出器故障求助

问题分析与修复方案

核心问题

你代码里创建了两个独立的TracerProvider实例:

  • tp 没有配置任何SpanProcessor,桥接时用的就是这个实例的Tracer,导致生成的追踪数据根本不会传递到导出器。
  • tracerProvider 虽配置了SpanProcessor和导出器,但仅被设为全局TracerProvider,未在桥接逻辑中使用。

修复后的代码

exp, err := otlptracehttp.New(ctx, otlptracehttp.WithInsecure(), otlptracehttp.WithEndpoint("localhost:4318"))
if err != nil {
    panic(err)
}

// 仅创建一个TracerProvider,同时配置采样器和SpanProcessor
tracerProvider := sdktrace.NewTracerProvider(
    sdktrace.WithSampler(sdktrace.AlwaysSample()),
    sdktrace.WithSpanProcessor(sdktrace.NewSimpleSpanProcessor(exp)),
)
otel.SetTracerProvider(tracerProvider)

// 桥接时使用配置完整的TracerProvider的Tracer
otTracer, err := otbridge.NewTracerPair(tracerProvider.Tracer("service"))
if err != nil {
    panic(err)
}
stdopentracing.SetGlobalTracer(otTracer)

// 关键:程序退出前调用Shutdown,确保追踪数据被完整发送
defer func() {
    if err := tracerProvider.Shutdown(ctx); err != nil {
        log.Printf("failed to shutdown tracer provider: %v", err)
    }
}()

额外检查项

  • 确认OpenTelemetry Collector正在localhost:4318监听HTTP请求,可通过curl http://localhost:4318/v1/traces测试连通性。
  • 确保依赖包版本兼容,建议使用最新稳定版的go.opentelemetry.io/otel、go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp和go.opentelemetry.io/otel/bridge/opentracing。
  • 不要忽略otbridge.NewTracerPair返回的错误,实际代码中需处理该错误以避免潜在问题。

内容的提问来源于stack exchange,提问作者paulturnip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:02:19