当应用程序启动(asp.net)时,会发送一些日志,并且它们在 NewRelic 中可见。但是当应用程序处理http请求时,通过ILogger发送的日志永远不会出现在NewRelic中。我有 OTEL_DIAGNOSTICS.json 文件,但没有写入错误。 ConsoleExporter 工作完美。我可以正常看到痕迹。在 NewRelic 中,NrIntegrationError 集合中没有出现任何内容。我做错了什么? NewRelic 似乎只显示与跟踪和跨度不相关的日志。
builder.Services.AddOpenTelemetry()
.ConfigureResource(builder => builder.AddService(Otel.ServiceName, serviceVersion: Otel.ServiceVersion))
.WithLogging(logging => logging
.AddConsoleExporter()
.AddOtlpExporter(otlp =>
{
otlp.Endpoint = new Uri($"{_otelEndpoint}/v1/logs");
otlp.Headers = $"api-key={_otelApiKey}";
otlp.Protocol = _otelProtocol; // Using Http/Protobuf
}), options =>
{
options.IncludeFormattedMessage = true;
options.IncludeScopes = true;
options.ParseStateValues = true;
})
.WithTracing(tracing => tracing
.AddSource(Otel.ServiceName)
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddRedisInstrumentation()
.AddAWSInstrumentation()
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri($"{_otelEndpoint}/v1/traces");
options.Headers = $"api-key={_otelApiKey}";
options.Protocol = _otelProtocol;
}))
.WithMetrics(metrics => metrics
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri($"{_otelEndpoint}/v1/metrics");
options.Headers = $"api-key={_otelApiKey}";
options.Protocol = _otelProtocol;
}));
您的问题可能与NewRelic中日志和痕迹之间的相关性有关。以下是一些需要检查的事项:
上下文关联:确保您的 OpenTelemetry 日志设置 (AddOtlpExporter) 包含正确的上下文传播,以便日志与跟踪 ID 相关。
日志级别设置:确保日志级别没有被过滤掉。将日志级别设置为“调试”或“信息”以验证日志是否出现。
端点和协议:仔细检查 OTLP 端点 (_otelEndpoint/v1/logs)、标头(api-key)和协议设置,以确保它们正确且与 NewRelic 兼容。
上下文中的日志:使用 NewRelic 的“上下文中的日志”功能来帮助将日志与跟踪关联起来。考虑添加 NewRelic.LogEnrichers 包以进行自动丰富。
日志处理器:确保您使用 BatchLogProcessor 来管理日志导出,并且正确传播 Activity.Current 以维护上下文。