OpenTelemetry-dotnet StartActiveSpan调用后未生成Trace数据
OpenTelemetry .NET 手动埋点无Trace输出问题解决
问题复现
运行以下代码调用/test接口时,接口正常返回"response",但控制台无任何Trace追踪数据输出:
using OpenTelemetry.Resources; using OpenTelemetry.Trace; const string serviceName = "WebApplication1"; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenTelemetryTracing(tracerProviderBuilder => { tracerProviderBuilder .AddConsoleExporter() .AddSource(serviceName) .SetResourceBuilder( ResourceBuilder.CreateDefault() .AddService(serviceName: serviceName, serviceVersion: "1.0.0")); }).AddSingleton(TracerProvider.Default.GetTracer(serviceName)); var app = builder.Build(); app.MapGet("/test", (Tracer tracer) => { using var span = tracer.StartActiveSpan("test-span"); return "response"; }); app.Run();
根因分析
- Tracer实例获取错误:
TracerProvider.Default是全局默认的空Trace提供程序,和你通过AddOpenTelemetryTracing配置的、挂载了Console导出器的TraceProvider完全独立,用它生成的Tracer创建的Span不会被任何导出器采集。 - 缺少ASP.NET Core请求追踪适配:没有引入ASP.NET Core instrumentation组件时,框架不会自动创建请求根Span,手动创建的Span也无法和请求上下文正确关联。
修复方案
- 先安装对应依赖NuGet包:
OpenTelemetry.Extensions.HostingOpenTelemetry.Exporter.ConsoleOpenTelemetry.Instrumentation.AspNetCore
- 替换为以下正确代码:
using OpenTelemetry.Resources; using OpenTelemetry.Trace; const string serviceName = "WebApplication1"; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenTelemetryTracing(tracerProviderBuilder => { tracerProviderBuilder // 启用ASP.NET Core请求自动追踪 .AddAspNetCoreInstrumentation() .AddConsoleExporter() .AddSource(serviceName) .SetResourceBuilder( ResourceBuilder.CreateDefault() .AddService(serviceName: serviceName, serviceVersion: "1.0.0")); }); // 从DI容器获取配置完成的TracerProvider生成Tracer实例,不要用静态Default实例 builder.Services.AddSingleton(sp => { var provider = sp.GetRequiredService<TracerProvider>(); return provider.GetTracer(serviceName); }); var app = builder.Build(); app.MapGet("/test", (Tracer tracer) => { using var span = tracer.StartActiveSpan("test-span"); // 可按需添加自定义Span标签 span.SetAttribute("request.custom", "test-demo"); return "response"; }); app.Run();
修复后重启应用,调用
/test接口即可在控制台看到完整Trace日志,包含自动生成的请求入口Span和手动创建的test-span子Span。
内容的提问来源于stack exchange,提问作者Ellisein
相关产品推荐
相关产品推荐

