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

ASP.NET Core中间件中New Relic TraceId无法获取问题求助

解决New Relic TraceId在ASP.NET Core中间件中为空的问题

1. 调整中间件注册顺序

New Relic的中间件需要先于你的自定义TraceIdMiddleware执行,才能完成追踪上下文的初始化。确保在Program.cs中按以下顺序注册:

var builder = WebApplication.CreateBuilder(args);
// 先注册New Relic服务
builder.Services.AddNewRelic();

var app = builder.Build();

// 优先启用New Relic中间件
app.UseNewRelic();
// 再注册自定义TraceId中间件
app.UseMiddleware<TraceIdMiddleware>();

// 其他业务中间件...
app.Run();

2. 切换到可靠的TraceId获取API

直接通过当前事务对象获取TraceId,比TraceMetadata更适配请求生命周期:
修改InvokeAsync方法如下:

public async Task InvokeAsync(HttpContext context)
{
    if (!context.Request.Headers.ContainsKey("X-Trace-Id"))
    {
        var transaction = NewRelic.Api.Agent.NewRelic.GetCurrentTransaction();
        var traceId = transaction?.TraceId;
       
        _logger.LogWarning("NewRelic Trace Id " + traceId);
        _logger.LogWarning("Http context trace Id " + context.TraceIdentifier);
      
        if (!string.IsNullOrEmpty(traceId))
        {
            context.Response.Headers.Append("X-Trace-Id", traceId);
        }
    }

    await _next(context);
}

3. 确认分布式追踪配置有效性

检查New Relic配置,确保分布式追踪已启用:

  • 配置文件newrelic.config中确认:<distributed_tracing enabled="true"/>
  • 或设置环境变量:NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true

如果上述调整后仍有问题,可以尝试在后续中间件执行完成后再获取TraceId(确保New Relic事务已完全初始化):

public async Task InvokeAsync(HttpContext context)
{
    // 先执行后续业务逻辑
    await _next(context);

    if (!context.Request.Headers.ContainsKey("X-Trace-Id") && !context.Response.Headers.ContainsKey("X-Trace-Id"))
    {
        var transaction = NewRelic.Api.Agent.NewRelic.GetCurrentTransaction();
        var traceId = transaction?.TraceId;
       
        if (!string.IsNullOrEmpty(traceId))
        {
            context.Response.Headers.Append("X-Trace-Id", traceId);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:15:01