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

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也无法和请求上下文正确关联。

修复方案

  1. 先安装对应依赖NuGet包:
    • OpenTelemetry.Extensions.Hosting
    • OpenTelemetry.Exporter.Console
    • OpenTelemetry.Instrumentation.AspNetCore
  2. 替换为以下正确代码:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:09:22