本文介绍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。
设置固定比例采样的操作步骤如下:
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在上方导航栏选择
。在采样设置区域选择采样策略为固定采样率,在采样率百分比区域输入采样率百分比的数字部分,例如输入10代表采样10%。
说明修改即时生效,无需重启应用。默认为10,调大采样率会消耗额外的系统资源,建议保持默认值。
单击保存。
自适应采样
由于实际场景下应用不同业务的流量可能差距很大,且读接口流量往往远大于写接口流量。但是读接口的Trace数据价值一般低于写接口。为了避免固定比例采样命中过多大流量低价值Trace数据,ARMS提供了自适应采样策略。该策略会按照LFU的原则选取当前调用量Top 1000的接口,每个接口的采样彼此隔离,每秒采样10条,对于Top 1000以外的接口被统一看作一个Other接口,共享一秒10条Trace的Quota。执行采样策略并命中采样的Span会携带一个Key为sample.reason
,Value为s6
的Attribute。
设置自适应采样的操作步骤如下:
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在上方导航栏选择
。在采样设置区域选择采样策略为自适应采样。
说明修改即时生效,无需重启应用。
单击保存。
非头采样策略
依靠头采样策略难以保证一些符合指定特征的Span数据的采样,而这种数据往往是用户关心的。例如有错慢异常的Span,某些调用量极低的Span,以及用户自定义的Span等。但是这些策略命中的采样因为可能发生在链路任何位置,无法保证链路完整。
小流量采样
无需用户配置,自动保证每一个接口每一分钟至少有一条Trace被采样。执行采样策略并命中采样的Span会携带一个Key为sample.reason
,Value为s2
的Attribute。
错慢异常采样
使用错慢异常采样需确认自定义配置页面的调用链压缩功能已开启,该功能默认开启。
当一次接口的调用满足下述条件时,该次调用对应的Trace会被采样。
接口报错:HTTP类接口响应码非200,其他接口被埋点的方法抛出异常。
接口内部执行抛出异常:接口内部执行过程中出现异常,但是该异常未抛出到框架的入口埋点。
接口调用耗时高: 接口调用耗时超过自定义配置页面配置的接口慢调用阈值。
说明如果同时开启了分位数统计,则当接口调用耗时大于该接口P99分位数时也会被识别为慢调用。
执行采样策略并命中采样的Span会携带一个Key为sample.reason
,Value为s9
、s11
或s10
的Attribute。具体取值分别对应上面的三个条件。
自定义采样
当上述采样策略均无法保证用户需要的Trace被采样时,用户可自定义需要被100%采样的接口名、接口前缀、接口后缀等。执行采样策略并命中采样的Span会携带一个Key为sample.reason
,Value为s3
的Attribute。
设置自定义采样的操作步骤如下:
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在上方导航栏选择
。在采样设置区域自定义需要全采样的接口、接口前缀、接口后缀。
说明修改即时生效,无需重启应用。
单击保存。
采样策略工作原理
以A>B>C链路为例,一次实际的业务调用生成的Span最后是否上报是由上述的采样策略共同决定的,具体的决策流程如下图所示,该决策流程会在请求到达A、B、C处均执行一次,但是根据当前是LocalRootSpan还是RootSpan,某些节点会跳过执行。
流程图中不同颜色的含义如下:
紫色:标准的头采样,只会在链路的rootSpan处触发。该策略只会在A处触发。
蓝色:只要头采样未命中,可以在链路的任何节点触发。例如A通过采样策略决定不采样,请求到B之后,B会根据自己的自定义采样和小流量采样策略重新计算一次是否采样,如果采样,会将采样标传递给C。该策略会在A、B、C处触发。
绿色:只要当前的采样结果不采样,可以在链路的任何节点触发,但是不影响之后链路,例如A通过采样策略决定不采样,请求到B之后,B会根据错慢采样策略决定是否采样,如果采样,不会把采样标传递给C。该策略会在A、B、C处触发。
相关文档
调用链采集完成后,您可以基于已存储的全量链路明细数据,自由组合筛选条件与聚合维度进行实时分析。更多信息,请参见调用链分析。