使用应用程序洞察(AI)的多个组件之间的端到端日志记录是基于Request-Id头的.因此,每个组件都负责执行一个可能传入的Request-Id。为了在Application中获得完整的端到端分层流的正确性,需要使用Request-Id头作为AI、Operation.Id和Operation.ParentId (如描述的这里)。
但是,当使用Request-Id头向Azure函数发出请求时,使用HttpTrigger绑定,例如,配置了集成应用程序洞察(如描述的这里)的HttpTrigger绑定(Microsoft.NET.Sdk.Functions 1.0.24),就会创建和使用一个全新的Operation.Id,从而导致AI中的整个流丢失。关于如何绕过这件事有什么想法吗?
设置一个单独的自定义TelemetryClient可能是一个选项。但是似乎需要大量的配置才能获得完整的ExceptionTrackingTelemetryModule和DependencyTrackingTelemetryModule --特别是在使用v2和Core函数时(参考到AI配置)。有人干得那么成功吗?
发布于 2018-12-21 00:57:25
这还没有得到函数的支持,但应该会在明年初开始工作。
如果您想破解它,可以添加对ApplicationInsights SDK (v2.4.1)的引用,并配置RequestTrackingTelemetryModule。
static Function1()
{
requestModule = new RequestTrackingTelemetryModule();
requestModule.Initialize(TelemetryConfiguration.Active);
}
private static RequestTrackingTelemetryModule requestModule;这是相当粗略的,没有充分的测试和缺点。例如,收集的请求不再使用函数细节(调用id等)进行扩展。要克服这一问题,您需要从函数依赖注入容器中获取真正的TelemetryConfiguration,并使用它初始化模块。它应该是可能,但是被某些问题阻塞了。
但是,即使使用上面的代码,您也应该得到尊重传入标头和与请求相关的其他遥测的请求。
此外,当推出对http请求的相关性的开箱即用支持时,这种支持可能会中断.因此,这是一个讨厌的临时解决方案,只有当你必须使用它。
https://stackoverflow.com/questions/53870489
复制相似问题