Azure 应用程序见解-如何在TelemetryInitializer中使用ISupportProperties

Azure 应用程序见解-如何在TelemetryInitializer中使用ISupportProperties,azure,azure-application-insights,Azure,Azure Application Insights,我有一个自定义AI遥测初始化器。最近,我开始收到一条编译器警告,说Context.Properties已过时: TelemetryContext.Properties已过时。请使用GlobalProperties设置全局级别的属性。对于项目级别的属性,请使用ISupportProperties.Properties。 1.如何做到这一点?使用ISupportProperties。属性? 2.我正在根据请求记录主体中索赔的租户Id和设备Id。这是应用程序全局还是支持属性 公共类JsonTelem

我有一个自定义AI遥测初始化器。最近,我开始收到一条编译器警告,说Context.Properties已过时: TelemetryContext.Properties已过时。请使用GlobalProperties设置全局级别的属性。对于项目级别的属性,请使用ISupportProperties.Properties。 1.如何做到这一点?使用ISupportProperties。属性? 2.我正在根据请求记录主体中索赔的租户Id和设备Id。这是应用程序全局还是支持属性

公共类JsonTelemetryInitializer:ITelemetryInitializer
{
专用只读IHttpContextAccessor\u httpContextAccessor;
私有只读系统选项_SystemOptions;
/// 
///建造师
/// 
///用于访问http上下文
///系统选项
公共JsonTelemetryInitializer(IHttpContextAccessor访问器,IOOptions系统选项)
{
_httpContextAccessor=访问器;
_systemOptions=systemOptions.Value;
}
/// 
///初始化自定义遥测初始值设定项
/// 
///遥测
公共无效初始化(ITelemetry遥测)
{
if(_httpContextAccessor.HttpContext==null)
{
返回;
}
if(_httpContextAccessor.HttpContext.User.Identity.IsAuthenticated)
{
const string tenantId=“northstar\u tenantId”;
if(!telemetry.Context.Properties.ContainsKey(tenantId))
{
var user=\u httpContextAccessor.HttpContext.user;
遥测.Context.Properties[tenantId]=
GetClaim(user,TokenNames.TenantId.ToString();
var userId=ClaimsHelper.GetClaim(user,TokenNames.userId).ToString();
telemetry.Context.Properties[“northstar_userid”]=userid;
var deviceId=ClaimsHelper.GetClaim(用户,TokenNames.deviceId);
如果(设备ID!=null)
{
telemetry.Context.Properties[“northstar_deviceid”]=deviceid;
}
telemetry.Context.User.Id=用户Id;
var sessionId=ClaimsHelper.GetClaim(用户,TokenNames.sessionId);
如果(!string.IsNullOrEmpty(sessionId))
{
telemetry.Context.Session.Id=sessionId;
}
}
}
}
}
1.如何做到这一点?使用ISupportProperties。属性

只需将
ITelemetry
转换为
ISupportProperties

我的示例代码如下所示:

  using Microsoft.ApplicationInsights.Channel;
  using Microsoft.ApplicationInsights.DataContracts;
  using Microsoft.ApplicationInsights.Extensibility;

  public class MyTelemetryInitializer:ITelemetryInitializer
  {

     public void Initialize(ITelemetry telemetry)
     {
          //cast ITelemetry to ISupportProperties
          ISupportProperties propTelemetry = (ISupportProperties)telemetry;

          if (!propTelemetry.Properties.ContainsKey("isuport_key"))
          {
              propTelemetry.Properties.Add("isuport_key", "isupport_value");
          }

      }
  }
然后在执行后,属性显示在azure portal中,屏幕截图如下:

2.我正在根据请求记录主体中索赔的租户Id和设备Id。这是应用程序全局还是支持属性


据我所知,您可以使用支持属性(项目级),因为它与您以前使用的类似
telemetry.Context.Properties[“northstar\u deviceid”]=deviceid;

我遇到了类似的问题并找到了这篇文章。 他们添加了将属性添加到遥测上下文的文档。 只需将ITelemetry转换为遥测

public void Initialize(ITelemetry telemetry)
{
    var requestTelemetry = telemetry as RequestTelemetry;
    
    if (requestTelemetry == null) return;

    requestTelemetry.Properties["customProp"] = "test";
}

这里有一些信息,但仍然不确定如何访问ISupportProperties:这是一个难看的角色。你需要一个真的很遗憾。@vit,你好,vit,如果你有更好的解决方案,请与我们分享。但是在你的评论中说些什么并不好。我知道我可以用一个更家庭友好的方式表达我的失望呃,但重点仍然是。新的API设计迫使我们进行此转换,我不知道如何解决。@vit,我可以理解你,app insights团队从未提供过关于此的官方文档。我将提交一个问题,如果他们有任何反馈,我会让你知道。@vit,链接是,你可以为此添加评论。