分布式追踪中的采样策略全解析
1. 服务网格追踪与采样的背景
在分布式、基于微服务的应用中,服务网格是添加可观测性特性的强大平台。它无需对应用进行更改,就能生成丰富的指标和日志,用于监控和排查应用问题。同时,如果应用进行了白盒检测以传播上下文,服务网格还能生成分布式追踪信息,传播方式可以是仅传递头部信息,也可以通过常规的追踪检测。
服务网格的边车代理构成了数据平面,它们对服务间通信的深入了解有助于生成详细且最新的服务图。通过将OpenTracing行李(分布式上下文传播工具)与服务网格中的路由规则相结合,我们可以进行有针对性的、基于请求范围的路由决策,这在A/B测试和金丝雀部署中非常有用。
然而,在生产环境中收集监控数据时,我们总是需要在存储和性能开销成本与收集数据的表达能力之间进行权衡。分布式追踪也不例外,追踪数据的体积很容易超过应用所承受的实际业务流量。为了应对这些问题,大多数追踪系统采用各种采样方式,仅捕获部分观测到的追踪信息。
2. 采样方法概述
大多数采样方法的共同特点是尝试在整个追踪级别而非单个跨度级别做出采样决策,这通常被称为一致或连贯采样。这样做可以保留跨度之间的所有因果关系,有助于更深入地理解请求工作流程。
2.1 基于头部的一致采样
基于头部的一致采样,也称为前期采样,在追踪开始时为每个追踪做出一次采样决策。该决策通常由应用内部运行的追踪库做出,因为在创建第一个跨度时咨询追踪后端会使追踪基础设施成为业务请求的关键路径,这对性能和可靠性都非常不利。
决策作为追踪元数据的一部分被记录,并作为上下文的一部分在整个调用图中传播。这种采样方案确保追踪系统要么捕获给