Azure functions 在Azure函数中添加自定义遥测属性

Azure functions 在Azure函数中添加自定义遥测属性,azure-functions,azure-application-insights,Azure Functions,Azure Application Insights,我有一个Azure函数(v2),其中数据通过HTTP主体作为JSON传递。我想使用标准的跟踪和请求事件,在ApplicationInsights中记录一些JSON数据 到目前为止,我所尝试的: 使用自定义的ITelemetryInitializer,它解析正文并将属性添加到ISupportProperties.properties。但这有两个缺点:每次请求都会多次读取和解析主体(在我的函数中读取一次,在遥测初始值设定项中读取多次),有时访问主体会抛出异常,因为它已被释放(可能在函数调用结束时超

我有一个Azure函数(v2),其中数据通过HTTP主体作为JSON传递。我想使用标准的跟踪和请求事件,在ApplicationInsights中记录一些JSON数据

到目前为止,我所尝试的:

  • 使用自定义的
    ITelemetryInitializer
    ,它解析正文并将属性添加到
    ISupportProperties.properties
    。但这有两个缺点:每次请求都会多次读取和解析主体(在我的函数中读取一次,在遥测初始值设定项中读取多次),有时访问主体会抛出异常,因为它已被释放(可能在函数调用结束时超出范围)
  • 在我的函数中使用
    遥测客户端
    。但此客户端似乎没有要设置的适当属性:
    • TelemetryClient.Context.globalproperty
      用于全局属性,而不是用于请求范围的属性
    • TelemetryClient.Context.Properties
      已过时,我不知道如何使用推荐的替代品
      ISupportProperties.Properties
理想情况下,我希望使用在函数中解析的数据,并使用该数据初始化遥测数据

  • 您可以通过在
    Activity.Current
    上添加标签来更新请求遥测属性,如
    Activity.Current?.AddTag(“我的道具”,ExtractPropFromRequest())如果没有任何其他更改,这些标记将在请求时显示。不幸的是,你不会把它们印在痕迹上

  • 您还可以在函数中解析一次请求主体,并将其存储在AsyncLocal中。然后在遥测初始化器中访问此AsyncLocal

  • 公共类AsyncLocalPropertyTyleMetryInitializer:ITelemetryInitializer
    {
    公共无效初始化(ITelemetry遥测)
    {
    如果(遥测是ISupportProperties)遥测&&
    Function1.AdditionalContext.Value!=null)//您可能会找到一种更好的方法使其与DI一起工作
    {
    propTelemetry.Properties[“我的道具”]=Function1.AdditionalContext.Value;
    }
    }
    }
    公共静态类函数
    {
    内部静态只读AsyncLocal AdditionalContext=new AsyncLocal();
    [功能名称(“功能1”)]
    公共静态异步任务运行([HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequest请求,ILogger日志)
    {
    AdditionalContext.Value=“something important”;//阅读此处的正文
    LogInformation(“C#HTTP触发器函数处理了一个请求。”)
    AdditionalContext.Value=null;
    // ...
    }
    }
    }
    
    Young只需使用编写跟踪日志即可。您还可以记录。@geogechen我的目标是丰富默认的跟踪和请求日志消息,这些消息写入应用程序洞察,而不是写入额外的日志消息。谢谢!关于
    活动的第一个建议。当前的
    有效,我可以使用。但第二个建议对我不起作用。在正常请求调用
    ITelemetryInitializer.Initialize
    时,AsyncLocal字段不再有值。很明显,遥测初始化器是从另一个上下文调用的。我无法使#1工作。。我没有看到customDimensions中的标记——1是否适用于编译到.NET Framework的Azure函数v1?这似乎是从这里开始的。我猜作者在这两方面都是一样的