Application Insights 中的自适应采样会影响遥测关联吗?

Does Adaptive Sampling in Application Insights affect Telemetry Correlation?

我正在构建一个通过 Azure Functions 管道处理数据的解决方案。总共有 10 多个,数据可以分叉到不同的方向。

在开发过程中,我们一直在使用 App Insights,内置的相关性非常宝贵,能够看到一项数据如何在系统中传播真是太棒了。

到目前为止,我们一直在使用摄取采样来限制 App Insights 成本,效果很好,并且在处理 App Insights 服务端时保留了相关事件(据我了解)。

我们正在考虑使用自适应采样来让我们更好地控制采样的发生方式,但我担心的是因为这是客户端(Azure 函数端),它不会尊重相关性,我们将无法查看请求的完整旅程。我查看了文档但无法确认这一点 - 有人知道答案吗?

谢谢!

*摄取侧采样的工作方式相同 - 只是在这种情况下,所有项目都会上传,然后会发生丢弃。这类似于固定采样。

以下是采样(固定或自适应)在一个应用程序边界内的工作方式:

  1. 传入请求具有操作 ID(从上游接收到的新请求)
  2. 每个遥测项(请求、依赖项、异常等)都标有此操作 ID
  3. 对于每个遥测项目,AI SDK 对操作 ID 进行哈希处理并转换为 [0,1] 范围
  4. 此采样率与当前采样阈值(固定或自适应)进行比较
  5. 如果该值小于阈值,则在
  6. 中对项目进行采样

这保证了一个应用程序中的所有项目都被抽出或抽入(在交易期间自适应抽样阈值发生变化且交易抽样率处于边界线时的极端情况)。

现在它如何扩展到分布式应用程序:

  1. 操作 ID 不仅会传播到其他遥测项目,还会作为传出呼叫(HTTPS、队列项目等)的一部分传播(根据 W3C 标准)
  2. 每个应用程序独立应用相同的采样逻辑。但是operation id是一样的,所以对于一个特定交易的采样率是一样的。
  3. 如果我们有一个具有固定采样率的分布式系统,并且每个应用程序的比率完全相同 - 那么可以保证事务将被完全采样或完全采样。
  4. 如果分布式系统使用自适应采样并且各种应用程序具有不同的负载,那么交易可能会在
  5. 中被部分采样

Application Insights UX 如何帮助查找完整事务:

  1. 在主要的两个故障排除体验中 - 故障和性能 - 经过切片和切块(使用各种过滤器缩小范围)后,提供的项目按“相关性”排序
  2. 由于所有项目都满足筛选条件,因此它们基本上按采样率排序(UX 使用完全相同的算法)
  3. 现在需要一点数学知识 =) 假设有 100 个遥测项目可供选择,将以 99.5% 的概率找到一个样本,该样本将以 1% 的自适应采样率(100 个请求 /秒/虚拟机)。