跳转至

小程序应用接入


通过引入 SDK,收集微信小程序应用的性能指标、错误日志和资源请求数据,并上报到观测云,以可视化方式分析应用性能。

创建小程序应用

  1. 进入「用户访问监测 > 应用列表」,点击「新建应用」,应用类型选择「小程序」。
  2. 在「定义应用」中填写应用名称、应用 ID,并创建应用。控制台会生成此应用的 Client Token。
  3. 创建成功后,在「选择接入方式」中选择 Agent 自动接入或手动接入,再按照「接入配置」完成配置。已有小程序应用可进入其配置页面继续接入。

小程序应用应使用本页的小程序 SDK。即使与 Web 应用使用同一套业务代码,也需要按实际应用类型分别接入。

选择接入方式

接入方式 适用场景 操作入口
Agent 自动接入 希望由编程助手分析小程序项目,并根据项目情况规划和完成 SDK 接入 复制控制台生成的 Agent 提示词,在小程序代码仓库中执行
手动接入 希望自行引入 SDK 并配置上报参数 选择公网 DataWay 或本地环境部署,再按本页示例修改代码

Agent 自动接入

  1. 在小程序应用配置页面选择「Agent 自动接入」。
  2. 复制「接入配置」中的完整提示词,在小程序代码仓库中打开编程助手并粘贴。提示词应来自当前小程序应用,使用该应用的 ID。
  3. 按 Agent 的接入指引完成配置,再按验证接入确认小程序数据上报和入库。

若页面提示个人 API Key 或临时授权码未就绪,请按提示生成个人 API Key、联系管理员开通权限或补齐信息后重新复制提示词。

手动接入

通常优先选择「使用公网 DataWay」,无需自行部署 DataKit。需要自行管理数据接收端,或当前工作空间未提供公网 DataWay 地址时,可选择「本地环境部署」。

数据上报方式 前置条件 初始化参数
使用公网 DataWay 从当前应用的接入配置中获取公网 DataWay 地址和 Client Token applicationId、site、clientToken
本地环境部署 自行安装 DataKit 并启用 RUM 采集器,确保小程序可以访问其上报地址 applicationId、datakitOrigin

NPM 和 CDN 是 SDK 的引入方式,与上报到公网 DataWay 或本地 DataKit 是两项独立选择。

使用公网 DataWay

  1. 在「手动接入」下选择「使用公网 DataWay」。
  2. 从当前应用的接入配置中复制 applicationId、site 和 clientToken。请使用控制台提供的当前站点地址,不要将控制台登录地址或其他站点的地址作为 site。
  3. 将 site 对应域名加入微信小程序管理后台的 request 合法域名,再按集成 SDK完成代码配置。此方式无需安装 DataKit 或另行配置 RUM 采集器。

本地环境部署

  1. 安装 DataKit,并启用 RUM 采集器。
  2. 确保小程序所在网络可以访问 DataKit 的数据上报地址,并按需安装 IP 地理信息库,以解析用户 IP 对应的地理信息。
  3. 在「手动接入」下选择「本地环境部署」,将 datakitOrigin 配置为实际的 DataKit 接收地址,并将对应域名加入小程序管理后台的 request 合法域名。
  4. 按集成 SDK中的本地环境部署示例初始化,不要同时填写 site 和 clientToken。

集成 SDK

先选择一种 SDK 引入方式,再按照所选的数据上报方式初始化。SDK 需要在 app.js 中、App() 调用之前初始化,并且只初始化一次。

引入 SDK

按微信官方 npm 引入说明准备依赖,然后在 app.js 中引入:

const { datafluxRum } = require('@cloudcare/rum-miniapp')

下载 SDK 文件,放入小程序项目,例如 lib/dataflux-rum-miniapp.js,然后在 app.js 中引入:

const { datafluxRum } = require('./lib/dataflux-rum-miniapp.js')

控制台中的「CDN」方式需要先将文件下载到项目中,再使用本地路径引入。

初始化 SDK

以下两种配置只选一种。公网 DataWay 使用 site 和 clientToken,本地环境部署使用 datakitOrigin,不要在同一份初始化配置中同时填写两套上报参数。

datafluxRum.init({
  applicationId: '<APPLICATION_ID>',
  site: '<PUBLIC_DATAWAY_URL>',
  clientToken: '<CLIENT_TOKEN>',
  env: 'production',
  version: '1.0.0',
  service: 'miniapp',
  sampleRate: 100,
  trackInteractions: true,
  traceType: 'ddtrace',
  allowedTracingUrls: ['https://api.example.com/v1/'],
})
datafluxRum.init({
  applicationId: '<APPLICATION_ID>',
  datakitOrigin: '<DATAKIT_ORIGIN>',
  env: 'production',
  version: '1.0.0',
  service: 'miniapp',
  sampleRate: 100,
  trackInteractions: true,
  traceType: 'ddtrace',
  allowedTracingUrls: ['https://api.example.com/v1/'],
})

将占位符替换为当前应用的实际配置;allowedTracingUrls 只填写需要关联链路的业务 API 地址,不需要链路追踪时可移除。

验证接入

  1. 检查所选上报地址对应的域名已经加入微信小程序的 request 合法域名。
  2. 打开小程序,触发页面访问、按钮点击和业务请求,在开发者工具中确认存在成功的 RUM 上报请求,且没有域名校验或 SDK 初始化错误。
  3. 进入「用户访问监测 > 应用列表」,打开对应小程序应用,确认查看器中有 View、Resource 或 Action 等数据。
  4. 发布前使用真机验证网络连通和数据上报,避免仅依赖开发者工具中的调试配置。

如果没有数据,先确认 applicationId 与当前小程序应用一致,再检查所选上报方式的参数、request 合法域名和 sampleRate。

配置

初始化参数

参数 类型 是否必须 默认值 描述
applicationId String 是 从观测云创建的应用 ID。
datakitOrigin String 本地环境部署时 DataKit 数据上报地址。仅本地环境部署时配置;对应域名需要加入小程序管理后台的 request 合法域名。
site String 公网 DataWay 时 当前站点的公网 DataWay 地址,从应用接入配置中复制;对应域名需要加入小程序管理后台的 request 合法域名。
clientToken String 公网 DataWay 时 公网 DataWay 上报使用的 Client Token,由控制台创建应用时生成。
env String 否 小程序应用当前环境,如 prod:线上环境;gray:灰度环境;pre:预发布环境;common:日常环境;local:本地环境。
version String 否 小程序应用的版本号。
service String 否 当前应用的服务名称,默认为 miniapp,支持自定义配置。
sampleRate Number 否 100 指标数据收集百分比:100 表示全收集,0 表示不收集。
sessionSampleRate Number 否 100 sampleRate 的兼容别名。两者同时设置时优先使用 sampleRate。
remoteConfiguration Boolean 否 false 是否开启远程配置。SDK 会先按本地配置启动,再异步拉取并应用支持的配置项。
remoteConfigration Boolean 否 false remoteConfiguration 的旧拼写兼容项,不建议新项目使用。
remoteConfigurationFetchTimeout Number 否 3000 远程配置请求超时时间,单位为毫秒。请求失败或超时后继续使用本地配置。
trackInteractions Boolean 否 false 是否开启用户行为采集。
trackResourceQueryString Boolean 否 false 是否采集请求 URL 的查询串。查询串可能包含 token 或用户 ID,仅在确认安全后开启。
trackRequestErrorResponseBody Boolean 否 false 是否将失败请求的响应体写入错误堆栈。响应体可能包含敏感数据。
requestErrorResponseLengthLimit Number 否 32768 失败请求响应体允许写入错误堆栈的最大字符数,仅在开启 trackRequestErrorResponseBody 后生效。
trackLaunchOptions Boolean 否 false 是否采集小程序启动参数中的 query 和 referrerInfo。
beforeSend Function 否 数据进入发送队列前的回调,可修改事件;返回 false 可丢弃非 View 事件。回调异常不会中断业务或 SDK。
userId / user_id String 否 初始化时设置登录用户 ID;也可以在初始化后调用 setUser({ id })。
traceType Enum 否 ddtrace 配置链路追踪工具类型,如果不配置默认为 ddtrace。目前支持 ddtrace、zipkin、skywalking_v3、jaeger、zipkin_single_header、w3c_traceparent 6 种数据类型。
❗️
1. opentelemetry 支持 zipkin_single_header、w3c_traceparent、zipkin、jaeger 4 种类型。
2. 配置相应类型的 traceType 需要对相应的 API 服务 设置不同的 Access-Control-Allow-Headers,可参考 APM 如何关联 RUM 。
traceId128Bit Boolean 否 false 是否生成 128 位 traceID,与 traceType 对应,目前支持 zipkin、jaeger。
allowedTracingUrls Array 否 [] 允许注入 Trace Header 的完整请求 URL 匹配列表。字符串按 URL 前缀匹配;正则和函数接收完整 URL;对象使用 { match, traceType } 为单条规则指定传播类型。版本要求为 2.2.19 及以上。
allowedTracingOrigins Array 否 已废弃的兼容配置,仅按请求 Origin 精确匹配;新项目使用 allowedTracingUrls。两者同时设置时优先使用 allowedTracingUrls。
allowTraceHeaderWithoutSession Boolean 否 false 当前 Session 未命中采样时,是否仍为命中 allowedTracingUrls 的请求注入 Trace Header。开启后不会强制采样或上报该 Session 的 RUM 数据。
isIntakeUrl Function 否 function(url) {return false} 自定义方法根据请求资源 url 判断是否需要采集对应资源数据,默认都采集。返回:false 表示要采集,true 表示不需要采集。
❗️
1. 该参数方法返回结果必须为 Boolean 类型,否则认为是无效参数。
2. 版本要求为 2.1.10 及以上。

Trace Header URL 匹配

allowedTracingUrls 使用完整请求 URL 匹配。字符串采用前缀匹配,RegExp 和 Function 接收完整 URL。需要为某条规则指定不同的传播类型时,使用同时包含 match 和 traceType 的对象:

allowedTracingUrls: [
  'https://api.example.com/v1/',
  /https:\/\/.*\.my-api-domain\.com\/v2\//,
  function (url) {
    return url.indexOf('https://internal.example.com/') === 0
  },
  { match: 'https://otel.example.com/', traceType: 'w3c_traceparent' },
]

allowedTracingOrigins 仅用于兼容旧配置:字符串和正则都针对请求 Origin 匹配。若同时配置两个参数,SDK 只使用 allowedTracingUrls。

未采样 Session 的 Trace Header

allowTraceHeaderWithoutSession 默认为 false。设置为 true 后,即使当前 Session 未命中 RUM 采样,SDK 仍会为命中 allowedTracingUrls 的请求注入 Trace Header。该配置不会强制采样或创建新的 Session,也不会上报未采样 Session 的 View、Action、Resource、Error 等 RUM 数据。

注意

  1. 将实际使用的上报地址(公网 DataWay 的 site,或本地环境部署的 datakitOrigin)对应域名加入小程序管理后台的 request 合法域名。
  2. 因为目前微信小程序请求资源 API wx.request、wx.downloadFile 返回数据中 profile 字段目前 ios 系统不支持返回,所以会导致收集的资源信息中和 timing 相关的数据收集不全。目前暂无解决方案:request、downloadFile、API 支持情况。
  3. trackInteractions 用户行为采集开启后,因为微信小程序的限制,无法采集到控件的内容和结构数据,所以在小程序 SDK 里面我们采取的是声明式编程,通过在 wxml 文件里面设置 data-name 属性,可以给交互元素添加名称,方便后续统计是定位操作记录, 例如:
<button bindtap="bindSetData" data-name="setData">
  setData
</button>

文档评价

文档内容是否对您有帮助?