Azure functions 在Azure函数中添加自定义遥测属性
我有一个Azure函数(v2),其中数据通过HTTP主体作为JSON传递。我想使用标准的跟踪和请求事件,在ApplicationInsights中记录一些JSON数据 到目前为止,我所尝试的:Azure functions 在Azure函数中添加自定义遥测属性,azure-functions,azure-application-insights,Azure Functions,Azure Application Insights,我有一个Azure函数(v2),其中数据通过HTTP主体作为JSON传递。我想使用标准的跟踪和请求事件,在ApplicationInsights中记录一些JSON数据 到目前为止,我所尝试的: 使用自定义的ITelemetryInitializer,它解析正文并将属性添加到ISupportProperties.properties。但这有两个缺点:每次请求都会多次读取和解析主体(在我的函数中读取一次,在遥测初始值设定项中读取多次),有时访问主体会抛出异常,因为它已被释放(可能在函数调用结束时超
- 使用自定义的
,它解析正文并将属性添加到ITelemetryInitializer
。但这有两个缺点:每次请求都会多次读取和解析主体(在我的函数中读取一次,在遥测初始值设定项中读取多次),有时访问主体会抛出异常,因为它已被释放(可能在函数调用结束时超出范围)ISupportProperties.properties
- 在我的函数中使用
。但此客户端似乎没有要设置的适当属性:遥测客户端
用于全局属性,而不是用于请求范围的属性李>TelemetryClient.Context.globalproperty
已过时,我不知道如何使用推荐的替代品TelemetryClient.Context.Properties
ISupportProperties.Properties
Activity.Current
上添加标签来更新请求遥测属性,如Activity.Current?.AddTag(“我的道具”,ExtractPropFromRequest())代码>如果没有任何其他更改,这些标记将在请求时显示。不幸的是,你不会把它们印在痕迹上
公共类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?这似乎是从这里开始的。我猜作者在这两方面都是一样的