有些场景下只希望上报部分数据,可以称为采样。本文介绍如何在SDK和平台上中配置采样。
- 在平台上配置采样(推荐):同样可以指定任意事件和任意规则,配置任意的采样率,同时无需发版,动态下发。
- 在SDK插件中配置过滤:一般用于简单的采样需求。
- 在beforeSend中配置过滤:常见的采样方式,使用简单,灵活性强。
- 在SDK初始化时配置sample字段:常用于规则采样,可以指定任意事件和任意规则,配置任意的采样率。
平台侧可以在项目设置页面中配置采样率。
相比于在SDK中使用sample来配置采样:
说明
交互上支持多层嵌套,但是不推荐规则采样里再多层嵌套规则。
- 由于采样的是setting下发的机制,所以可能存在setting偶尔请求失败的情况,可能会导致配置后依然存在零星上报的情况。
您可以在开发者工具调试器中的network里过滤settings/minipro接口,从接口的响应体判断平台的配置是否有生效。
部分插件提供了一些过滤选项,可以针对简单的内容进行过滤,命中过滤则直接不上报。具体插件配置请参见配置插件。 例如,JS错误插件提供了按照错误信息过滤的配置项。完成以下配置,可以不上报指定的符合条件的JS错误。
ignoreErrors: ['Failed to fetch']
SDK提供了多个生命周期,其中beforeSend是自定义采样时常用的生命周期,每一个需要上报的事件都会完成beforeSend生命周期。在回调里返回false、null或者undefined,就不会上报该事件到平台上。
例如,完成以下配置,当页面地址中包含test,该页面发生的JS错误就不上报。
client.on('beforeSend', (ev) => {
if(ev.ev_type === 'js_error' && ev.common.url.includes('test')) {
您可以在init时传入sample对象来配置采样。
采样有两种模式:
例如,某个规则下的采样率是1%
- session模式下,如果当前会话命中1%的采样率,那么会话下的所有符合规则的事件都会上报。
- event模式下,每次事件都会重新计算是否命中1%的采样率,命中则上报,不命中则不被上报。
为了更好的还原单个用户下的所有行为,SDK默认采用的是session模式。
rules常用于指定某个事件类型的特殊采样率或者特殊规则采样。rules的参数类型是对象格式,key对应插件名称,value对应的EventSampleRule类型。所有的插件名称,请查看配置插件。 EventSampleRule的具体类型如下:
interface EventSampleRule {
sample_rate: number = 1
conditional_sample_rules?: Array<ConditionalSampleRule>
interface ConditionalSampleRule {
filter: FilterCondition
interface FilterCondition {
children?: Array<FilterCondition>
您可以通过配置单个事件的sample_rate指定单个事件类型的采样率,也可以通过配置conditional_sample_rules指定不同规则下的采样率。
在conditional_sample_rules中,type用来指定多个子规则children之间的与和或关系。
场景一:总采样0.1,针对pageview事件再采样0.2。
pageview实际采样率 = 总采样 * 单一事件采样 = 0.1 * 0.2 = 0.02。
sample_granularity: 'session',
conditional_sample_rules: [],
场景二:简单规则采样。
在场景一的基础上,设置一个条件,针对pid等于'login'的pageview事件只采样0.5。
[pid='login'] pageview实际采样率 = 总采样 * 规则采样率 = 0.05。
sample_granularity: 'session',
conditional_sample_rules: [
field的取值是MiniProgramSendEvent上报类型的字符串写法。在这个示例中,payload.pid等效于beforeSend中的ev.payload.pid。
场景三:复杂规则采样。
在上一个规则采样中再加入一个子规则。针对pid等于'login'并且release正则符合'0.1012'的pageview事件采样0.5。
pid等于'login'并且release正则符合'0.1012'的pageview实际采样率为 = 总采样 * 规则采样率= 0.05
sample_granularity: 'session',
conditional_sample_rules: [
field: 'common.release',
如果配置了多个规则采样,会按照数组顺序进行配置,如果上一个规则命中,则使用对应规则的采样率,都否则命中下一个规则采样。
从使用的角度,虽然设计时有些复杂,但是足够灵活,可以满足任意场景。如果觉得手动配置太多复杂或者对正确配置没有把握,可以直接选择在平台上配置采样,平台和SDK使用的是同一套规则。
如果SDK和平台都配置了采样,配置合并的优先级顺序为:SDK默认配置< 平台采样配置 < SDK初始化时用户传入的采样配置。
同时合并规则为深度合并,即对象合并,数组也合并。