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

Azure AppInsights分布式追踪问题:用户ID传递与关联ID异常

问题解决方案

一、传递前端user_AuthenticatedId到后端日志

  • 前端调用后端API时,手动将user_AuthenticatedId放入自定义请求头,比如X-User-Authenticated-Id
  • 后端.NET Core实现自定义遥测初始化器,从请求头读取该值并绑定到遥测的用户身份字段:
    public class UserIdTelemetryInitializer : ITelemetryInitializer
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
    
        public UserIdTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }
    
        public void Initialize(ITelemetry telemetry)
        {
            var httpContext = _httpContextAccessor.HttpContext;
            if (httpContext == null || telemetry.Context.User.AuthenticatedUserId != null)
                return;
    
            if (httpContext.Request.Headers.TryGetValue("X-User-Authenticated-Id", out var userId))
            {
                telemetry.Context.User.AuthenticatedUserId = userId.ToString();
            }
        }
    }
    
  • 在Program.cs(.NET 6+)中注册这个初始化器:
    builder.Services.AddSingleton<ITelemetryInitializer, UserIdTelemetryInitializer>();
    

二、修复operation_Id关联问题

  • 前端调用API时,手动获取当前AppInsights的追踪ID,按格式放入Request-Id请求头(AppInsights后端默认识别该头):
    import { ApplicationInsights } from '@microsoft/applicationinsights-web';
    
    // 假设已初始化AppInsights实例为appInsights
    const trace = appInsights.context.telemetryTrace;
    // 按AppInsights要求的格式构造Request-Id
    const requestId = `|${trace.traceId}.${trace.parentId}.`;
    
    // 发起请求时添加请求头
    const headers = new HttpHeaders().set('Request-Id', requestId);
    
  • 检查前端setAuthenticatedUserContext调用:该方法仅负责设置用户身份,若发现它干扰了operation_Id,尝试升级AppInsights SDK到最新稳定版,或在设置用户上下文后重新获取追踪上下文,避免覆盖原有ID
  • 确保前端AppInsights初始化时开启分布式追踪:
    const appInsights = new ApplicationInsights({
        config: {
            instrumentationKey: '你的密钥',
            enableDistributedTracing: true,
            enableAutoRouteTracking: true
        }
    });
    appInsights.loadAppInsights();
    

验证要点

  • 确认前端请求头包含X-User-Authenticated-Id和Request-Id
  • 检查后端Requests、Exceptions表,确认user_AuthenticatedId已存在,且operation_Id与前端Dependencies表的对应值一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:35:00