全部产品
Search
文档中心

应用实时监控服务ARMS:调用链采样模式选择(3.2.8及以上探针版本)

更新时间:Dec 20, 2024

本文介绍ARMS支持的多种调用链采样模式,帮助您根据自身场景选择合适的调用链采样模式,从而以较低成本获取想要的调用链数据。

名词介绍

  • Span:一次请求的一个具体操作,比如远程调用入口或者内部方法调用。

  • RootSpan:一条Trace链路中的第一个Span。

  • LocalRootSpan:一条Trace链路在单个应用内的Trace片段的第一个Span。

  • SpanContext:一次请求追踪的上下文,用于关联该次请求下的具体操作。

  • 头采样:仅会在RootSpan处执行的采样策略,一般情况下链路是完整的。

  • 非头采样:在头采样策略未命中的情况下。链路任意一个LocalRootSpan处均可能触发执行的采样策略,一般情况下无法保证链路完整。

采样策略和采样标记介绍

ARMS为了命中更多有价值的Trace数据,提供了多种采样策略,其中包含两个头采样策略和三个非头采样策略。

采样标记

用于在使用EagleEye协议进行跨进程Trace上下文传递时记录是否采样,对应Header的Key为EagleEye-Sampled,对应的Value取值如下:

  • s0:不采样

  • s1:采样

用于在执行采样并命中采样的LocalRootSpan处记录采样原因,会以Attribute的形式存储在Span中,Key为sample.reason,Value取值如下:

  • s2:小流量采样

  • s3:自定义采样

  • s4:固定比例采样

  • s5:预留

  • s6:自适应采样

  • s7:预留

  • s8:基础版采样

  • s9:错采样

  • s10:慢采样

  • s11:异常采样

头采样策略

ARMS目前支持两种头采样策略,分别是固定比例采样和自适应采样。固定比例采样是Tracing领域最常见的头采样策略,自适应采样是ARMS自研的一种计费友好的头采样策略。

固定比例采样

现有的默认采样会在请求入口处根据用户配置的百分比采样链路。执行采样策略并命中固定比例采样的Span会携带一个Key为sample.reason,Value为s4的Attribute。image

设置固定比例采样的操作步骤如下:

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列的图标含义如下:

    Java图标:接入应用监控的Java应用。

    image:接入应用监控的Golang应用。

    image:接入应用监控的Python应用。

    -:接入可观测链路 OpenTelemetry 版的应用。

  3. 在上方导航栏选择应用配置 > 自定义配置

  4. 采样设置区域选择采样策略固定采样率,在采样率百分比区域输入采样率百分比的数字部分,例如输入10代表采样10%。

    说明

    修改即时生效,无需重启应用。默认为10,调大采样率会消耗额外的系统资源,建议保持默认值。

  5. 单击保存

自适应采样

由于实际场景下应用不同业务的流量可能差距很大,且读接口流量往往远大于写接口流量。但是读接口的Trace数据价值一般低于写接口。为了避免固定比例采样命中过多大流量低价值Trace数据,ARMS提供了自适应采样策略。该策略会按照LFU的原则选取当前调用量Top 1000的接口,每个接口的采样彼此隔离,每秒采样10条,对于Top 1000以外的接口被统一看作一个Other接口,共享一秒10条Trace的Quota。执行采样策略并命中采样的Span会携带一个Key为sample.reason,Value为s6的Attribute。image

设置自适应采样的操作步骤如下:

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列的图标含义如下:

    Java图标:接入应用监控的Java应用。

    image:接入应用监控的Golang应用。

    image:接入应用监控的Python应用。

    -:接入可观测链路 OpenTelemetry 版的应用。

  3. 在上方导航栏选择应用配置 > 自定义配置

  4. 采样设置区域选择采样策略自适应采样

    说明

    修改即时生效,无需重启应用。

  5. 单击保存

非头采样策略

依靠头采样策略难以保证一些符合指定特征的Span数据的采样,而这种数据往往是用户关心的。例如有错慢异常的Span,某些调用量极低的Span,以及用户自定义的Span等。但是这些策略命中的采样因为可能发生在链路任何位置,无法保证链路完整。

小流量采样

无需用户配置,自动保证每一个接口每一分钟至少有一条Trace被采样。执行采样策略并命中采样的Span会携带一个Key为sample.reason,Value为s2的Attribute。

image

错慢异常采样

重要

使用错慢异常采样需确认自定义配置页面的调用链压缩功能已开启,该功能默认开启。

当一次接口的调用满足下述条件时,该次调用对应的Trace会被采样。

  • 接口报错:HTTP类接口响应码非200,其他接口被埋点的方法抛出异常。

  • 接口内部执行抛出异常:接口内部执行过程中出现异常,但是该异常未抛出到框架的入口埋点。

  • 接口调用耗时高: 接口调用耗时超过自定义配置页面配置的接口慢调用阈值。

    说明

    如果同时开启了分位数统计,则当接口调用耗时大于该接口P99分位数时也会被识别为慢调用。

执行采样策略并命中采样的Span会携带一个Key为sample.reason,Value为s9s11s10的Attribute。具体取值分别对应上面的三个条件。

image.png

自定义采样

当上述采样策略均无法保证用户需要的Trace被采样时,用户可自定义需要被100%采样的接口名、接口前缀、接口后缀等。执行采样策略并命中采样的Span会携带一个Key为sample.reason,Value为s3的Attribute。

image.png

设置自定义采样的操作步骤如下:

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列的图标含义如下:

    Java图标:接入应用监控的Java应用。

    image:接入应用监控的Golang应用。

    image:接入应用监控的Python应用。

    -:接入可观测链路 OpenTelemetry 版的应用。

  3. 在上方导航栏选择应用配置 > 自定义配置

  4. 采样设置区域自定义需要全采样的接口、接口前缀、接口后缀。

    说明

    修改即时生效,无需重启应用。

  5. 单击保存。

采样策略工作原理

以A>B>C链路为例,一次实际的业务调用生成的Span最后是否上报是由上述的采样策略共同决定的,具体的决策流程如下图所示,该决策流程会在请求到达A、B、C处均执行一次,但是根据当前是LocalRootSpan还是RootSpan,某些节点会跳过执行。

image

流程图中不同颜色的含义如下:

  • 紫色:标准的头采样,只会在链路的rootSpan处触发。该策略只会在A处触发。

  • 蓝色:只要头采样未命中,可以在链路的任何节点触发。例如A通过采样策略决定不采样,请求到B之后,B会根据自己的自定义采样和小流量采样策略重新计算一次是否采样,如果采样,会将采样标传递给C。该策略会在A、B、C处触发。

  • 绿色:只要当前的采样结果不采样,可以在链路的任何节点触发,但是不影响之后链路,例如A通过采样策略决定不采样,请求到B之后,B会根据错慢采样策略决定是否采样,如果采样,不会把采样标传递给C。该策略会在A、B、C处触发。

相关文档

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