我对Azure App Insights采样有疑问。 如果日志项的itemCount字段大于1,是否意味着确实存在SAME请求且已对其进行了采样?
我的日志有一个请求,它使用itemCount = 2发送此消息。此请求已以OptimisticConcurrencyException结束,因此我的事务已被回滚支持。在此交易中,我向第三方服务发送消息。 最有趣的是,他们告诉我他们从我的服务中得到了2条消息,我的数据库已经更新(所以事务已经提交)。 所有这一切都变得清晰,如果有2个请求,其中一个返回200个代码,另一个返回500.但是应用洞察日志项目abot OptimisticConcurrencyException值valueCount = 2,这意味着此异常被抛出两次(对于两个请求) 。 此外,除此之外,我没有看到任何其他可能会改变数据的请求,请求正在发生变化。
那么有人可以解释一下应用洞察如何抽样请求和错误吗?
答案 0 :(得分:6)
这实际上取决于您的采样发生的方式/位置,因为根据您的应用配置方式,可能会在3个不同的地方进行采样。
有一个fair amount of documentation about the various layers of sampling,但假设:
采样算法决定丢弃哪些遥测项目,以及保留哪些遥测项目(无论是在SDK中还是在Application Insights服务中)。采样决策基于若干规则,旨在保持所有相互关联的数据点完好无损,在Application Insights中保持诊断体验,即使数据集减少也可行且可靠。例如,如果对于失败的请求,您的应用程序会发送其他遥测项目(例如从此请求记录的异常和跟踪),则采样不会拆分此请求和其他遥测。它要么将它们保持在一起,要么一起放下因此,当您在Application Insights中查看请求详细信息时,您始终可以查看请求及其关联的遥测项目。
<强>更新强>: 我从团队中进行抽样的人那里获得了更多细节,它的工作原理如下:
itemCount=<sampling ratio>
这将解释您所看到的行为,当两个请求(成功+失败)被计为两次失败时:失败的请求被“取样”,因此在遥测中,您有2个失败的请求(一个请求itemCount = 2)而不是失败和成功,因为成功的一个被取样。