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

.NET OpenTelemetry中TracerProvider.Default与TracerProviderBuilder的关联疑问

OpenTelemetry Tracer 相关技术问题

场景代码

注册Tracer为单例

builder.Services.AddSingleton(TracerProvider.Default.GetTracer(builder.Environment.ApplicationName));

Minimal API中使用Tracer

app.MapGet("/podcasts", async (PodcastDbContext db, RatingServiceHttpClient ratingServiceHttpClient, Tracer tracer) => ...

配置OpenTelemetry追踪

builder.Services.AddOpenTelemetry()
     .WithTracing(tracing => ...)

技术问询

  1. TracerProviderBuilder的配置是否会应用于通过TracerProvider.Default.GetTracer()获取的Tracer?
  2. 仅通过TracerProviderBuilder的AddSource()配置源,那么TracerProvider.Default.GetTracer()获取的Tracer发出的追踪如何被导出(无对应源监听时追踪会被忽略)?
  3. TracerProviderBuilder何时用于构建TracerProvider和Tracer?代码中未看到其相关引用。

问题解答

  1. 不会。TracerProvider.Default是OpenTelemetry提供的全局默认实例,和通过AddOpenTelemetry().WithTracing()配置的TracerProvider是两个独立对象。TracerProviderBuilder上的所有配置(添加导出器、处理器、源等)仅作用于自身构建的TracerProvider,不会影响全局默认实例。

  2. 这种情况下,TracerProvider.Default获取的Tracer发出的追踪会被直接忽略——因为默认Provider既没有配置对应监听源,也没有绑定导出器。要解决这个问题有两种方式:

    • 放弃使用TracerProvider.Default,改为从自定义配置的TracerProvider中获取Tracer(可通过DI注入TracerProvider后调用GetTracer)
    • 直接给TracerProvider.Default配置对应源和导出器,比如启动时执行TracerProvider.Default.AddSource(你的源名称),同时为默认Provider添加导出逻辑
  3. TracerProviderBuilder的构建动作由OpenTelemetry的DI集成自动完成。在应用启动、DI容器初始化完成的过程中,框架会自动解析并执行Builder的配置逻辑,最终创建出符合要求的TracerProvider实例。虽然代码里没有显式写构建调用,但AddOpenTelemetry()扩展方法已经将构建逻辑注册到了DI容器中,最终实例可通过DI注入使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:42:13