【问题标题】:Application Insights Operation.Id from an HTTP header来自 HTTP 标头的 Application Insights Operation.Id
【发布时间】:2017-06-17 06:31:59
【问题描述】:

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

This 表示标准上下文由 AI 自动管理,因此我需要一个代码示例来展示如何使用自定义值正确初始化 Operation.Id。以下代码不起作用,标题值被忽略:

var operationInitializer = TelemetryConfiguration.Active.TelemetryInitializers.OfType<Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer>().FirstOrDefault();

if (operationInitializer != null)
{
      operationInitializer.RootOperationIdHeaderName = "X-Operation-Id";
}

【问题讨论】:

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


【解决方案1】:

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

在您的情况下,我的建议是采用不同的方法 - 而不是尝试覆盖此属性,而是创建并注册您自己的遥测初始化程序以从您的标头设置 Operation.ID。如果设置此属性,OperationCorrelationTelemetryInitializer 将忽略它并且不会覆盖。这样你就可以确认你的 headers 可以被正确读取,并且你可以很容易地在 Initialize 方法中设置断点来调试。

【讨论】:

  • 我最担心的是我不确定如何正确初始化它并在初始化器中访问HttpContext。只是HttpContext.Current吗?这将与基于 OWIN 的应用程序一起使用吗?
【解决方案2】:

目前被问到的问题是 AI SDK 有 2.2 版。最近我已经升级到最新的 2.4 版本,它现在按预期工作。因此,如果您在X-Operation-Id HTTP 标头中传递“HELLO”(您仍然需要在Application_Start() 中的问题中使用该代码),然后在Application_BeginRequest()(或HttpContext 可用的任何地方)请求遥测:

    RequestTelemetry telemetry = HttpContext.Current.GetRequestTelemetry();

telemetry.Id 将包含类似|HELLO.d0b9d5b7_ 的内容。 如果您在下一个请求中传递“HELLO”,则该十六进制后缀会增加,因此 Id 始终是唯一的。我不知道这是否可以被覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    相关资源
    最近更新 更多