【问题标题】:How to detect dependencies on exceptions如何检测对异常的依赖
【发布时间】:2019-04-24 11:36:23
【问题描述】:

我之前曾问过一个关于特定telemetry sampling 的问题,其中可以丢弃 10% 的成功调用。

原来依赖关系需要单独处理。过滤掉大部分成功的依赖可能会导致失败/异常信息的丢失。

有什么方法可以知道一个依赖项是属于异常还是属于一起的 Telemetry 项?

编辑:显然有一个'successful call' 属性。但找不到太多关于它的信息。是依赖本身失败了还是原来的调用失败了?

【问题讨论】:

    标签: .net azure azure-application-insights telemetry


    【解决方案1】:

    一起的遥测应该有相同的operation_Id,所以如果你正在寻找一种将事物组合在一起的方法(就像端到端详细信息视图一样),你会想要查看 operation_Ids。

    理想情况下,您将有一个入站请求,它设置operation_Id/operation_Name 上下文,然后在该请求中发生的所有事情,包括日志、依赖项、异常、事件、指标等都将具有相同的operation_Id 值,并且可以一起找到。

    对依赖项的成功调用表明特定的“出站”请求成功。即使请求中的依赖项失败,您仍然可以请求成功,反之亦然,具体取决于您的系统的工作方式。

    这里唯一的“陷阱”是如果您使用的是异步。在这些情况下,当异步代码实际运行时,它可能无法访问启动异步代码时正在/正在运行的请求。在这些情况下,您可能需要自己做额外的工作以确保操作上下文正确地通过您的异步代码传递。

    【讨论】:

    • 这是有道理的。那么,了解依赖项是否与异常相关的唯一方法是跟踪所有异常并将其 operation_Id 存储在某处?
    • 如果您正在使用应用程序洞察力,您不是已经在跟踪异常遥测了吗?那些也已经设置了操作ID。 (exceptions 是一个遥测表,dependencies 是一个遥测表,requests 是一个遥测表,等等。如果您正在使用请求和依赖项,您可能也已经在使用异常
    • 是的,但是通过丢弃依赖关系,我不会丢弃有关异常的有用信息吗?
    • 谁在丢弃依赖项?就像 Cijo 所说,采样试图将所有内容放在一个 operation_Id 中。如果您有异常,则该操作中发生的所有内容都应该被采样,而不是被丢弃。
    • 这是我的问题。 ITelemetryProcessor 中的一些 ITelemetry 项是依赖项。我可以在不丢失异常信息的情况下丢弃它们吗?
    【解决方案2】:

    有什么方法可以知道一个依赖项是属于一个异常还是集群属于一起的遥测项?

    您可以使用 operation_id 从单个操作中查找所有遥测数据。但是您可能不需要它,因为默认采样会保留或丢弃单个操作中的所有遥测(即相同的 operation_id)。

    因此,如果您的请求失败,并且遥测数据被应用程序洞察捕获,并且采样决定发送此请求,那么所有相关遥测数据(包括异常、依赖项)也将被保留。

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2022-09-28
      • 2018-05-29
      • 2013-05-25
      • 2018-06-10
      • 2011-01-27
      相关资源
      最近更新 更多