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

如何为ApplicationInsights中requests记录的customDimensions添加值?

给Application Insights Requests的customDimensions添加自定义属性的方法

方法1:使用TelemetryInitializer(全局可靠方案)

这是全局生效的方式,能自动给所有RequestTelemetry的customDimensions追加属性,适合统一注入场景。

  1. 实现ITelemetryInitializer接口类:
public class CustomRequestTelemetryInitializer : ITelemetryInitializer
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public CustomRequestTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void Initialize(ITelemetry telemetry)
    {
        if (telemetry is RequestTelemetry requestTelemetry)
        {
            // 直接添加固定属性
            requestTelemetry.Properties["CustomGlobalKey"] = "CustomGlobalValue";

            // 从当前请求上下文提取动态属性(如用户ID)
            var httpContext = _httpContextAccessor.HttpContext;
            if (httpContext?.User?.Identity?.IsAuthenticated == true)
            {
                requestTelemetry.Properties["AuthenticatedUserId"] = httpContext.User.Identity.Name;
            }
        }
    }
}
  1. 在项目启动类(Program.cs/Startup.cs)中注册:
// .NET 6+ 示例
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddSingleton<ITelemetryInitializer, CustomRequestTelemetryInitializer>();
builder.Services.AddHttpContextAccessor(); // 如需从HttpContext取数据必须注册

方法2:通过Activity传递属性(适配OpenTelemetry场景)

之前用Activity.Current.AddTag无效,大概率是操作时机或API使用错误,正确方式如下:

// 在请求处理流程内(如Controller Action、中间件中)
if (Activity.Current != null)
{
    // 直接设置标签,会被Application Insights捕获到customDimensions
    Activity.Current.SetTag("CustomActivityKey", "CustomActivityValue");
    
    // 若需要属性传递到下游服务,用AddBaggage,同样会同步到customDimensions
    Activity.Current.AddBaggage("DownstreamBaggageKey", "DownstreamValue");
}

注意:确保项目已正确集成Application Insights与Activity追踪,.NET 6+的官方SDK默认已关联两者。

方法3:结合Logger Scope同步属性到Requests

你提到logger.BeginScope可给Traces加值,通过配置可让这些Scope属性同步到RequestTelemetry:

  1. 在appsettings.json中添加配置:
"ApplicationInsights": {
  "InstrumentationKey": "你的仪器密钥",
  "Logging": {
    "ApplicationInsights": {
      "Scopes": {
        "EnableScopes": true,
        "IncludeScopesInCustomDimensions": true
      }
    }
  }
}
  1. 在代码中创建Scope并执行请求逻辑:
var scopeProperties = new Dictionary<string, object>
{
    { "CustomScopeKey", "CustomScopeValue" }
};

using (logger.BeginScope(scopeProperties))
{
    // 此处的请求处理逻辑,对应的RequestTelemetry会自动带上Scope中的属性
}

注意:该方案要求Application Insights SDK版本≥2.20.0,旧版本不支持此同步逻辑。

常见问题说明

  • 旧版TelemetryClient.Properties是全局属性池,仅适合所有请求共享的固定属性,针对单请求的自定义属性推荐用TelemetryInitializer。
  • 若Activity.Current为空,检查是否在异步流程中丢失了上下文,或是否未启用Activity追踪(.NET Core 3.1+默认启用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:15:29