本文介绍ARMS支持的多种调用链采样模式,帮助您根据自身场景选择合适的调用链采样模式,从而以较低成本获取想要的调用链数据。
对于绝大多数的分布式系统,不是每一条调用链都值得被可观测平台记录,因为其中包含大量重复的,低关注度的信息。因此需要引入采样技术降低整体可观测成本,并过滤对用户没有帮助的噪音。
调用链采样的基本原则是优先记录您最关心、最有可能访问的调用链。ARMS提供以下几种采样模式:
固定采样率
固定比例采样就是根据TraceId顺序号记录一定比例的调用链数据。例如,固定比例为10%,则每10条调用链数据记录1条。固定比例采样不会导致调用链数据本身不完整,要么保留整条链路数据,要么丢弃整条链路数据。
设置固定比例采样的操作步骤如下:
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列显示图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 OpenTelemetry 版的应用。
- 在左侧导航栏中单击应用设置,并在右侧页面单击自定义配置页签。
在采样率设置区域设置采样率。选择采样率模式为固定采样率,在采样率设置字段输入百分比的数字部分,例如输入10代表采样10%。
说明修改即时生效,无需重启应用。默认为10,调大采样率会消耗额外的系统资源,建议保持默认值。
自适应采样
为了更进一步的降低使用成本,提高链路查询体验,阿里云可观测团队推出了自适应采样模式。与固定采样率不同,自适应采样通过引入多项采样命中策略,动态决定是否对一条链路进行采样,从而解决固定采样率在小采样率下的覆盖度问题以及大采样率下的成本问题。在大流量场景,以及业务流量变化比较大的场景,推荐您选择自适应采样模式。
自适应采样涉及的主要命中策略包括特定接口全采样、接口Top N采样、小流量兜底采样三种。
特定接口全采样指您可以通过自定义接口名、接口前后缀,来标记需要100%采样的接口。对于这些接口收到的请求,会触发整条链路的100%采样。由于特定接口全采样会造成采集数据量的大幅增加,请确保只对最重要的接口开启,或在必要的时候临时开启。
接口Top N采样使用变种LFU算法实现,在单位时间内只对每个接口的有限条目请求进行采样,其目的是为了保证数据采集规模不随接口的实际流量而线性增长。
小流量兜底采样是指在单位时间内,每个接口都至少保证有1次采样。这样可以在流量比较低的时候,对每个业务接口都确保记录最有价值的特征信息。
目前ARMS仅支持对全采样接口的自定义,暂时不支持对接口Top N采样和小流量兜底采样的细粒度调整。
设置自适应采样的操作步骤如下:
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列显示图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 OpenTelemetry 版的应用。
- 在左侧导航栏中单击应用设置,并在右侧页面单击自定义配置页签。
在采样率设置区域设置采样率。选择采样率模式为自适应采样,您可以自定义需要全采样的接口、接口前缀、接口后缀。
说明修改即时生效,无需重启应用。自适应采样功能仅支持2.8.3及以上版本探针。
基础版采样
基础版采样只针对开通基础版计费的用户可见,包含一条免费采样策略和多条可自定义的采样策略。
默认采样(免费):ARMS默认免费为您账号下所有接口的每个探针每分钟采集一条调用链。
自定义采样策略:您可以按照自身需求,配置自定义的采样策略。每条自定义采样策略可以按照固定比例或者固定流量采样,并支持选择适用于全部接口或者指定接口。
设置自定义采样的操作步骤如下:
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列显示图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 OpenTelemetry 版的应用。
- 在左侧导航栏中单击应用设置,并在右侧页面单击自定义配置页签。
在采样率设置区域单击添加客户端采样策略,设置以下参数后单击保存。
设置项
说明
策略名称
自定义采样策略名称。
采样类型和采样值
固定比例采样:按照设置的固定比例进行调用链采样。若选择此选项,则采样值设置为固定比例,如10%。
流量限额:若选择此选项,采样值需设置每个探针在设定时间范围内采集的调用链条数,如5条Trace/每个探针每1秒,表示每个探针每1秒钟采集5条调用链。
适用接口
设置采样策略生效的接口范围,可选择每个接口或指定接口并输入指定的接口名称。
说明目前每个采样策略在选择指定接口时,仅支持输入一个接口名。若需对多个接口进行调用链采样,则需设置多个采样策略。
自定义采样策略示例:
针对/elastic/update接口,每分钟采样20个Trace。
针对所有接口,按照流量的20%采样Trace。
错慢采样
错慢采样会在某次请求满足以下特征时,针对该次请求相关的Span进行采样。
本次调用报错。调用报错的判定条件又分两种:
一种是针对HTTP接口,状态码非2xx或者3xx。
另一种是通过LocalRootSpan的埋点方法捕获到的异常,一般是业务异常抛到了框架中的场景。
本次调用耗时超过之前相同接口调用耗时P99,需要注意,此处P99使用了分桶计算技术,可能存在一定偏差。
本次调用的内部某个方法抛出异常(4.1.x版本支持)。
需要注意,该采样策略无法保证全链路的完整,命中时,仅会保存一次调用在某个应用内的若干个Span。
补充说明
为了避免大流量场景下因为链路采集影响业务正常运行,ARMS对探针每秒最大链路采集量进行了限制,默认为100。这个保护性措施对固定采样率和自适应采样都是生效的,您可以通过自定义配置的限流阈值修改探针每秒最大链路采集量。
高于默认值会消耗额外的系统资源,建议保持默认值。
相关文档
调用链采集完成后,您可以基于已存储的全量链路明细数据,自由组合筛选条件与聚合维度进行实时分析。更多信息,请参见调用链分析。