【问题标题】:Issue with tracking related events using Operation Context使用操作上下文跟踪相关事件的问题
【发布时间】:2017-02-20 14:12:48
【问题描述】:

我有一个想要使用 Application Insights 监控的 WPF 应用程序。我想将每个用户操作分组为一个请求,并嵌入自定义事件和依赖项调用。从我在documentation 操作上下文中读到的内容应该是正确的方法。我写了以下代码:

using (var operation = telemetryClient.StartOperation<RequestTelemetry>(
      $"test operation {Guid.NewGuid()}"))
{
    telemetryClient.TrackEvent("my test event");
    telemetryClient.StopOperation(operation);
}

不幸的是,当我检查 Application Insights 门户时,“我的测试事件”并未显示为与请求事件相关的事件。我尝试了一下,发现如果我手动设置操作属性,事件就会变得相关:

using (var operation = telemetryClient.StartOperation<RequestTelemetry>(
      $"test operation {Guid.NewGuid()}"))
{
    var ev = new EventTelemetry("test event");
    ev.Context.Operation.Id = operation.Telemetry.Context.Operation.Id;
    ev.Context.Operation.Name = operation.Telemetry.Context.Operation.Name;
    telemetryClient.TrackEvent(ev);
    telemetryClient.StopOperation(operation);
}

但我有一种感觉,它不应该是这样的。所以我的问题是:有人能指出我在第一个 sn-p 中做错了什么吗? TelemetryClient 上是否有一些神奇的设置使其行为符合文档中的说明?

【问题讨论】:

  • 它仅默认在 ASP.Net 上下文中生成。请参阅docs.microsoft.com/en-us/azure/application-insights/…:您可以通过附加一个通用操作 ID 将遥测项关联在一起。标准请求跟踪模块对处理 HTTP 请求时发送的异常和其他事件执行此操作。在我的 WinForm 应用程序中,我也必须自己设置它。
  • 谢谢@PeterBons。看起来这个手动程序在这里是必须的。我将重构代码,使其看起来更好。您可以将您的评论作为答案,我会接受。

标签: c# azure azure-application-insights


【解决方案1】:

确保同一上下文中所有传出遥测具有相同操作 id、名称等的相对简单的方法是将 TelemetryInitializer 与 CallContext 结合使用。

This is a really good blog post 展示了如何做到这一点。

【讨论】:

  • 这实际上是个好主意。谢谢!
猜你喜欢
  • 2014-08-29
  • 2016-11-04
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
相关资源
最近更新 更多