.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.OpenTelemetryProtocolOpenTelemetry.Instrumentation.AspNetCoreOpenTelemetry.Extensions.Hosting
内容的提问来源于stack exchange,提问作者user729400
相关产品推荐
相关产品推荐

