Application Insights Operation.Id来自HTTP标头

时间:2017-01-31 17:41:14

标签: asp.net .net logging azure-application-insights diagnostics

我的项目使用ApplicationInsightsHttpModule从客户端UI应用程序设置的Operation.Id HTTP值初始化Microsoft.ApplicationInsights.RequestTelemetry。现在我希望我的API由第三方使用,第三方将提供X-Operation-Id HTTP标头来关联我们的活动。如果请求中存在Operation.Id,那么如何在其中初始化Operation.Id

This表示标准上下文由AI自动管理,因此我需要一个代码示例,说明如何使用自定义值正确初始化var operationInitializer = TelemetryConfiguration.Active.TelemetryInitializers.OfType<Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer>().FirstOrDefault(); if (operationInitializer != null) { operationInitializer.RootOperationIdHeaderName = "X-Operation-Id"; } 。以下代码不起作用,标头值被忽略:

parseInt

2 个答案:

答案 0 :(得分:1)

您在问题中包含的代码应该是第一眼看到的:您正在寻找正确的初始化程序并覆盖正确的属性。但是,可能有多种原因导致它无法按预期工作,并且调试这很难,因为它需要您实际进入Application Insights代码(如果您确定,the sources for every release are archived on GH)。

我的建议是采用不同的方法 - 而不是尝试覆盖此属性,创建并注册自己的遥测初始化程序以从标题中设置Operation.ID。如果设置此属性,OperationCorrelationTelemetryInitializer将忽略它而不覆盖。通过这种方式,您可以确认可以正确读取标头,并且可以在Initialize方法中轻松设置断点以进行调试。

答案 1 :(得分:0)

目前问的问题是AI SDK有2.2版本。最近我升级到最新版本2.4,它现在按预期工作。所以,如果你通过说'HELLO&#39;在X-Operation-Id HTTP标头中(您仍然需要Application_Start()中问题中的代码),然后在Application_BeginRequest()(或HttpContext可用的任何地方)要求进行遥测:

    RequestTelemetry telemetry = HttpContext.Current.GetRequestTelemetry();

telemetry.Id将包含|HELLO.d0b9d5b7_之类的内容。 如果你通过&#39; HELLO&#39;那十六进制后缀会增加。在下一个请求中,Id始终是唯一的。我不知道是否可以覆盖它。