文档

调用链采样配置最佳实践

更新时间:

对于绝大多数分布式系统,不是每一条调用链都值得被可观测平台记录,因为其中包含大量重复、低关注度信息。调整采样是目前解决这类问题最高效且主流的方式,但具体配置什么样的采样策略,能够在可控的资源开销和费用成本内,最大程度保证错、慢、异常等链路被采集,从而最大限度保障性能监控和问题排查的使用需求。本文将重点围绕不同业务场景下如何配置最合适的调用链采样策略以达到成本最优、效果最佳的目的。

概述

随着越来越多的企业步入数字化转型,IT系统也逐步向分布式、微服务化发展。在分布式系统中,随着各种中间件的引入,让原本就非常复杂的业务逻辑更加复杂,调用链路也越来越深。为了能够在分布式系统中清晰直观的展示调用关系并精确定位问题的案发现场,分布式链路追踪技术应运而生,可提供端到端的实时可观测能力。

下图是由ARMS调用链分析功能呈现的可视化调用链路,对于一条完整调用链路,通常用Trace来表示,一个Trace描述一次请求在(多个)服务中经过的路径。继续细分,每个路径均可称为Span,Span代表一个过程,它可以是一次RPC调用、中间件调用,也可以是一个for循环逻辑。

image.png

当业务量级不断增长,链路数据也会随之增多,简单算一下,如果某个链路的调用量4000 QPS,每个调用产生大概30个Span,每个Span大约500 Bytes,那一天产生的数据就是:4000×30×500(Bytes)×24(Hours)=4.7(TiB)。

如果有100个调用链路入口需要被全量采集,那每天就能产生400 TiB 数据。不可否认,调用链被全量采集后,出现突发状况时都可以找到对应的完整请求链路并进行问题排查定位。但是我们也无法忽视调用链全量采集带来的网络I/O 、链路处理、性能损耗、数据存储等可观测费用成本。

常用采样方案介绍

通过大量实践发现,无论从计算、存储资源成本消耗上进行分析,还是从具体使用场景角度评估,都不一定需要收集所有埋点数据。因此,分布式链路追踪系统支持按照一定策略上报数据,取得成本与收益之间的平衡,提高投入产出比。按照采样决策时机的不同可以分为3种典型采样策略:

image
  • 头部采样:Head-based sampling

    头部采样是在客户端就决定该链路是否采样,为了保证采样的连贯性,每条调用链都是在链路的入口服务就决定是否需要采样。这种采样算法对每个请求基本上都有平等的采样概率。优势是能够有效减少链路开销和数据成本,缺点是采样决策发生在端侧,命中错、慢或异常的链路概率可能较低。

  • 尾部采样:Tail-based sampling

    尾部采样是每条调用链都是在调用完成后,在服务端根据规则决定这条调用链是否需要被采样,所以需要将链路信息进行缓存,在决定是否采样之后才存储数据或丢弃数据,以保证数据的连贯性。优势是可在服务端精准筛选错、慢或异常的链路便于进行任意时刻的问题排查诊断,缺点是链路开销和数据成本高。

  • 单元采样:Unitary sampling

    单元采样是一种非连贯的采样机制,每条调用链分别由每个Span所属服务决定其数据是否采样上报。这种采样机制由每个服务决定自身的链路采样情况,因此上报的链路数据不是完整的。

应用实时监控服务ARMS重点在头部采样方案的基础上,在错慢链路、接口级别、流量自适应等维度做了较多增强,关于ARMS调用链采样规则说明,请参见调用链采样模式选择

基于业务场景制定最优采样策略

不同采样策略各有优劣,在实际业务场景中通常很难通过单一采样策略做到效果与成本的平衡,需要综合评估业务场景、观测需求和费用成本,因地制宜配置最适合的采样策略,例如核心应用、核心链路需要尽可能多采集,特别是对于异常链路的命中率,对于一些旁路服务或边缘应用则可以从成本考虑少采集甚至不采集。除了日常监控运维场景外,重大事件保障期间或新版本发布灰度期间,则需要从稳定性和应急响应角度评估采样方案,必要时可配置为全量采样策略。

以下将从ARMS调用链采样规则、成本控制和链路价值最大化的角度分析几种典型业务场景下的采样策略:

  • 基于成本控制角度考虑,从链路入口应用维度调整采样率,控制整体链路数据量

    头部采样的机制是由入口应用决定该条调用链是否被采样,如果入口应用的根 Span 被决策采样,那么链路信息将会逐级传递从而保证被采样链路的完整性,这个过程包括跨应用传递的场景。针对某个指定业务逻辑,调用链的层级相对明确,所以入口应用的请求数和采样率直接决定了整体观测应用被采集和上报的数据量,如果按照 ARMS 最新的按照可观测数据量计费方案,也将直接影响整体的产品使用费用。

    image

    如图,入口应用A对应的完整链路为:A - 1 - 3 - 4,入口应用B对应的完整链路为:B - 2 - 4,这里调用关系仅根据Top N接口固定概率采样后抽象到应用粒度进行说明,实际应用内不同接口调用链路会有所差异。

    1、2、3、4作为整个应用拓扑中的下游应用,其被采样的链路数据绝大部分都由其上游决定,所以从成本控制的角度考虑,通过调整应用A和B的采样率可较为明显的控制整体的可观测数据采集量。另外从链路价值角度来看,绝大部分调用链都是重复且雷同的,一个问题出现,除非是毛刺型偶发异常,不然异常表现也将会在多条调用链中重复出现,那么也就会以固定概率被采集到。所以通过降低入口应用的采样率,特别是请求数较高的入口应用,其带来的成本优势是远大于缩减调用链数量而引起的链路价值降低的。例如,调用链采样率由10%降低为5%,其链路数据对应的费用成本是减半的,但是链路价值并不会缩减一半,因为对于线上生产环境应用来说,出现错、慢、异常链路通常是小概率事件。

    ARMS支持应用级别设置固定概率采样策略,用户可以根据自身应用对应的业务逻辑,调整入口应用的调用链采样率,典型的入口应用有网关类应用、代理类应用、核心上游应用等。

    您可以在ARMS控制台指定应用下应用配置 > 自定义配置页面的采样设置区域调整固定采样率。更多信息,请参见固定采样率

    image.png

    同时ARMS也提供全局维度采样率自定义调整,ARMS通过探针标识每个应用的根Span,服务端计算出基于根Span数量的入口应用并按照链路数据量进行排序,用户可快速通过页面对Top N入口应用进行统一的采样率调整。

  • 基于核心业务多采集角度考虑,针对核心接口定向配置高比例采样率

    接入可观测的诸多应用中,一般会根据业务属性区分核心应用和非核心应用;对于单个应用内,也有核心接口和非核心接口的区别。例如电商系统中,商品详情和购买流程的业务逻辑是比查询或编辑用户信息的优先级高,对于这类业务逻辑对应的后端接口,是需要被优先采集以便确保重要的、难以快速复现的链路故障能够被立刻分析和解决。所以这类接口对应的调用链采样率建议配置较高比例,甚至是100%比例采样。

    ARMS支持接口粒度的采样策略,用户可以根据自身业务需求,配置接口粒度的自定义采样策略。每条接口粒度的采样策略可以按照固定比例或者固定流量采样。

    您可以在ARMS控制台指定应用下应用配置 > 自定义配置页面的采样率设置区域设置接口粒度的自定义采样策略。

    image.png

    与之配合的,针对非核心应用或非核心接口,则可按需降低对应的采样率,从而实现链路价值和成本优势最大化。

  • 基于大、小流量均可控采集角度考虑,采用流量自适应采样方案

    对于业务逻辑较为复杂的应用来说,单个应用内提供的接口通常较多,如果按照手动方式对不同类型接口进行自定义采样策略配置会带来不小的运维负担,且接口的调用情况会随着外部业务变化而有较大差异,特别对于一些小流量的接口,从业务价值来说非常重要,如果出错将会影响整条关键链路,例如一些调度类接口,但是这些接口在实际运行过程中被调用频次较低。如果按照应用维度固定概率采样,则会被请求数较多的接口挤占被采样的概率,如果按照接口粒度配置采样策略,则需要人为梳理这些小流量接口进行精准配置,带来较大运维成本。

    ARMS为了进一步降低使用和运维成本,提供了应用级别自适应采样模式。与固定采样率不同,自适应采样通过引入多项采样命中策略,动态决定是否对一条链路进行采样,从而解决固定采样率在小采样率下的覆盖度问题以及大采样率下的成本问题。

    自适应采样涉及的主要命中策略包括特定接口全采样、接口Top N采样、小流量兜底采样三种。

    • 特定接口全采样指您可以通过自定义接口名、接口前后缀,来标记需要100%采样的接口。对于这些接口收到的请求,会触发整条链路的100%采样。由于特定接口全采样会造成采集数据量的大幅增加,请确保只对最重要的接口开启,或在必要的时候临时开启。

    • 接口Top N采样使用变种LFU算法实现,在单位时间内只对每个接口的有限条目请求进行采样,其目的是为了保证数据采集规模不随接口的实际流量而线性增长。

    • 小流量兜底采样是指在单位时间内,每个接口都至少保证有1次采样。这样可以在流量比较低的时候,对每个业务接口都确保记录最有价值的特征信息。

    您可以在ARMS控制台指定应用下应用配置 > 自定义配置页面的采样设置区域设置自适应采样策略。更多信息,请参见自适应采样

    image.png

  • 基于重保角度考虑,特定时间段全采样

    运维过程中也经常会面临重大事件保障的场景,比如大促、新版本压测等,需要针对某一类标签的数据甚至全部应用开启全量数据采集和存储,以便出现问题或者故障时,可以快速定位,甚至影响审计和定责。那么,在这些特定时间段内我们建议开启调用链100%全量采集,等到重保时间段过去后再重新把采样策略调整为日常态策略,从而缓解全采带来性能损耗和成本压力。

    ARMS支持调用链采样配置模板化能力,满足不同场景切换生效不同配置模板的需求。更多信息,请参见将配置复制到其他应用

相关文档

调用链采集完成后,您可以基于已存储的全量链路明细数据,自由组合筛选条件与聚合维度进行实时分析。更多信息,请参见调用链分析

  • 本页导读 (1)
文档反馈