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

Jaeger无法接收ASP.NET Core应用的OpenTelemetry日志问题排查

问题:ASP.NET Core Web API日志无法在Jaeger中显示(已配置OpenTelemetry)

我使用OpenTelemetry和Jaeger收集ASP.NET Core Web API(基于标准WeatherForecast示例项目)的遥测数据,通过Docker运行Jaeger后,UI中能看到WebApiTest: GET WeatherForecast的链路追踪数据,但无法看到日志信息——尽管Web API项目的控制台已经输出包含TraceId、SpanId等链路信息的日志。

已在Program.cs中添加如下配置:

// Configure OpenTelemetry
var resource = ResourceBuilder.CreateDefault().AddService("WebApiTest");
builder.Services.AddOpenTelemetry()
    .WithTracing(tracerProviderBuilder =>
    {
        tracerProviderBuilder
       .SetResourceBuilder(resource)
        .AddAspNetCoreInstrumentation()
        .AddHttpClientInstrumentation()
        .AddConsoleExporter()
         .AddOtlpExporter(otlpOptions =>
         {
             // Use IConfiguration directly for Otlp exporter endpoint option.
             otlpOptions.Endpoint = new Uri(builder.Configuration.GetValue("Otlp:Endpoint", defaultValue: "http://localhost:4317")!);
         });
    });

// Clear default logging providers used by WebApplication host.
builder.Logging.ClearProviders();

// Configure OpenTelemetry Logging.
builder.Logging.AddOpenTelemetry(options =>
{
    options.SetResourceBuilder(resource);
    options.IncludeFormattedMessage = true;
    options.IncludeScopes = true;
    options.ParseStateValues = true;
    options.AddOtlpExporter(otlpOptions =>
    {
        otlpOptions.Endpoint = new Uri(builder.Configuration.GetValue("Otlp:Endpoint", defaultValue: "http://localhost:4317")!);
    });
    options.AddConsoleExporter();
});

var app = builder.Build();

并在WeatherForecastController的Get()方法中使用_logger.LogInformation("Getting weather forecast");记录日志。


可能的原因分析
  • Jaeger未启用OTLP日志接收功能
    默认Docker启动的Jaeger仅开启了OTLP追踪数据的接收,日志接收需要额外配置参数。启动Jaeger容器时需添加COLLECTOR_OTLP_ENABLE_LOGS=true环境变量,确保Jaeger的收集器能处理OTLP格式的日志数据。

  • Jaeger版本不支持OpenTelemetry日志
    较旧版本的Jaeger(v1.35之前)对OpenTelemetry日志的支持不完善,需要升级Jaeger到v1.35及以上版本,才能正常接收和展示OTLP日志。

  • OTLP日志导出的协议或端点配置错误
    OpenTelemetry日志导出默认使用gRPC协议(端口4317),但如果Jaeger仅配置了HTTP协议的OTLP接收(端口4318),则需要修改日志导出的Endpoint为http://localhost:4318/v1/logs,同时指定协议为HTTP:

    options.AddOtlpExporter(otlpOptions =>
    {
        otlpOptions.Endpoint = new Uri("http://localhost:4318/v1/logs");
        otlpOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
    });
    
  • 日志级别过滤问题
    检查Jaeger收集器或OpenTelemetry日志配置是否过滤了Info级别日志。比如OpenTelemetry默认可能只收集Warning及以上级别,需要确保日志级别配置正确,比如在appsettings.json中设置:

    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    }
    
  • 追踪上下文关联不规范
    虽然控制台日志显示了TraceId和SpanId,但需确保这些元数据是以OpenTelemetry规范的属性名(trace_id、span_id)传递给Jaeger。确认你的OpenTelemetry日志配置中IncludeScopes和ParseStateValues已正确启用,保证追踪上下文能被Jaeger识别并关联到对应链路。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:23:13