了解采样以及 OpenTelemetry 中可用的不同采样选项。
通过分布式跟踪,您可以观察请求在分布式系统中从一项服务传递到另一项服务的情况,出于多种原因,它非常实用,例如了解您的服务连接和诊断延迟问题,以及许多其他好处。
但是,如果您的所有请求中的大多数在 200 秒内都成功并且没有出现不可接受的延迟或错误,那么您真的需要所有这些数据吗?事实是这样的——您并不总是需要大量数据才能找到正确的答案,您只需要正确的数据采样。
采样背后的想法是控制发送到可观察性后端的跨度,从而降低摄取成本;不同的组织不仅有他们想要采样的原因,还有他们想要采样的内容。您可能希望自定义抽样策略因以下原因:
-
管理成本:如果您有大量遥测数据,您可能会承担来自遥测后端供应商或云提供商的高额费用以导出和存储每个跨度。
-
关注在感兴趣的跟踪:例如,您的前端团队可能只想查看具有特定用户属性的跟踪。
-
过滤噪声:例如,您可能想要过滤掉健康检查。
术语
在讨论抽样时使用一致的术语很重要,跟踪或跨度被视为“已采样”或“未采样”:
-
已采样:跟踪或跨度被处理和导出,因为它被采样者选为总体的代表,所以被认为是“采样的”。
-
未采样:跟踪或者跨度未被处理和导出,因为它不被采样者选择总体的代表,所以被认为是”未采样“。
有时,这些术语的定义会混淆,您可能会发现有人说他们正在“采样数据”或未处理或导出的数据被视为“采样”,这些都是不正确的陈述。
头部采样
头部采样是一种采样技术,用于尽早做出采样决定,采样或丢弃跨度或跟踪的决定不是通过检查整个跟踪来做出的。
例如,最常见的头部采样形式是一致概率采样,它也可以称为确定性采样。在这种情况下,将根据跟踪 ID 和要采样的所需跟踪百分比做出采样决定,这确保以一致的速率(例如所有迹线的 5%)对整个迹线进行采样 - 没有丢失跨度。
头部采样的优点是:
-
容易理解
-
易于配置
-
高效的
-
可以在跟踪收集流水线中的任何一节点完成
头部采样的主要缺点是不可能根据整个轨迹中的数据做出采样决定,这意味着头部采样作为一种钝器是有效的,但对于必须考虑整个系统信息的采样策略来说是完全不够的。例如,不可能使用头部采样来确保对其中有错误的所有迹线进行采样,为此你需要使用尾部采样。
尾部采样
尾部采样是通过考虑跟踪中的所有或大部分跨度来决定对跟踪进行采样的地方,Tail Sampling 使您可以选择根据从轨迹的不同部分派生的特定标准对轨迹进行采样,这是 Head Sampling 所不支持的选项。
如何使用尾部采样的一些示例包括:
-
始终对包含错误的跟踪进行采样
-
基于整体延迟的采样跟踪
-
根据跟踪中一个或多个跨度上存在特定属性对跟踪进行采样,例如,对源自新部署服务的更多跟踪进行采样
-
根据特定标准对跟踪应用不同的采样率
如您所见,尾部采样允许更高程度的复杂性,对于必须对遥测数据进行采样的大型系统,几乎总是需要使用尾部采样来平衡数据量与该数据的有用性。 目前尾部抽样存在三个主要缺点:
-
尾部采样可能难以实施,根据您可用的采样技术种类,它并不总是“一劳永逸”的事情;随着您的系统发生变化,您的采样策略也会发生变化,对于一个庞大而复杂的分布式系统,实现采样策略的规则也可能庞大而复杂。
-
尾部采样可能难以操作,实现尾采样的组件必须是可以接受和存储大量数据的有状态系统。根据流量模式,这可能需要数十个甚至数百个节点,它们都以不同方式利用资源。此外,如果尾部采样器无法跟上接收到的数据量,它可能需要“回退”到计算强度较低的采样技术,由于这些因素,监控尾部抽样组件以确保它们拥有做出正确抽样决策所需的资源至关重要。
-
目前,尾部采样器通常最终属于特定于供应商的技术领域,如果您使用付费供应商来提供可观察性,那么您可用的最有效的尾部抽样选项可能仅限于供应商提供的内容。
最后,对于某些系统,尾部采样可以与头部采样结合使用,例如,一组产生大量跟踪数据的服务可能首先使用头部采样仅对一小部分跟踪进行采样,然后在遥测管道中使用尾部采样进行更复杂的采样,然后再导出到后端,这样做通常是为了防止遥测管道过载。