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

.NET 7 API中OtlpExporter无法向NewRelic导出数据排查

问题描述

尝试通过OtlpExporter将指标、链路追踪和日志导出至NewRelic,但未成功。在一个简单的.NET 7 API中按如下方式配置了Program.cs,现象是NewRelic上无任何数据显示。我的license key正确,启用控制台日志后未看到任何错误或警告,除代码中配置外未设置其他环境变量,请问我遗漏了什么配置?

配置代码

using OpenTelemetry;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var endpoint = new Uri("https://otlp.eu01.nr-data.net");
var exportProcessorType = ExportProcessorType.Batch;
var protocol = OpenTelemetry.Exporter.OtlpExportProtocol.Grpc;
var headers = $"api-key=aaaaaaa";


builder.Logging.AddOpenTelemetry(logging =>
{
    logging.IncludeScopes = true;

    var resourceBuilder = ResourceBuilder
        .CreateDefault()
        .AddService("WeatherForecast");

    logging.SetResourceBuilder(resourceBuilder)
    //.AddConsoleExporter()
    .AddOtlpExporter(configure =>
        {
            configure.Endpoint = endpoint;
            configure.ExportProcessorType = exportProcessorType;
            configure.Protocol = protocol;
            configure.Headers = headers;
        });
});

builder.Services.AddOpenTelemetry()
    .WithMetrics(builder => builder
            .AddAspNetCoreInstrumentation()
            //.AddConsoleExporter()
            .AddOtlpExporter(configure =>
            {
                configure.Endpoint = endpoint;
                configure.ExportProcessorType = exportProcessorType;
                configure.Protocol = protocol;
                configure.Headers = headers;
            }))
        .WithTracing(builder => builder
            .AddAspNetCoreInstrumentation()
            //.AddConsoleExporter()
            .AddOtlpExporter(configure =>
            {
                configure.Endpoint = endpoint;
                configure.ExportProcessorType = exportProcessorType;
                configure.Protocol = protocol;
                configure.Headers = headers;
            }));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();
可能遗漏的配置点
  • OTLP端点未指定正确端口:NewRelic的GRPC OTLP端点使用4317端口,你的URI仅填写了域名,需改为new Uri("https://otlp.eu01.nr-data.net:4317")。默认HTTPS端口是443,但NewRelic的GRPC服务监听4317,端口不匹配会导致请求无法送达。
  • 未统一配置资源属性:当前仅在日志部分设置了ResourceBuilder,指标和追踪的OpenTelemetry配置未关联资源信息。需在全局OpenTelemetry配置中统一添加资源,确保服务标识被NewRelic正确识别:
    builder.Services.AddOpenTelemetry()
        .ConfigureResource(resourceBuilder => resourceBuilder
            .AddService("WeatherForecast"))
        .WithMetrics(...)
        .WithTracing(...);
    
  • 批量导出处理器默认参数导致数据延迟:Batch模式下默认的10秒调度延迟和较大批量阈值可能导致数据未及时发送,可手动调整参数缩短发送间隔:
    // 日志配置示例,指标和追踪同理
    configure.BatchExportProcessorOptions = new BatchExportProcessorOptions<LogRecord>
    {
        ScheduledDelayMilliseconds = 5000, // 5秒发送一次
        MaxExportBatchSize = 256
    };
    
  • 日志级别过滤限制:默认日志配置仅捕获Warning及以上级别,需确保日志级别设置为Information或更低,比如在代码中添加:
    builder.Logging.SetMinimumLevel(LogLevel.Information);
    
    或在appsettings.json中配置:
    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      }
    }
    
  • 缺少必要的NuGet包:确认已安装以下匹配版本的包:
    • OpenTelemetry.Exporter.OpenTelemetryProtocol
    • OpenTelemetry.Instrumentation.AspNetCore
    • OpenTelemetry.Extensions.Hosting

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:04:54