本文档介绍 ARMS 前端监控 Electron SDK 的全部配置项与 API。通过 armsRum.init() 传入配置对象即可完成 SDK 初始化。
SDK 配置(基础配置)
参数 | 类型 | 描述 | 是否必填 | 默认值 |
endpoint | string | 数据上报地址 | 是 | - |
enable | boolean | 是否启用 SDK | 否 | true |
env | ‘prod’ | ‘gray’ | ‘pre’ | ‘daily’ | ‘local’ | string | 应用环境标识 | 否 | - |
version | string | 应用版本号 | 否 | - |
endpoint 为必填项,为完整的上报地址 URL。可在 ARMS 控制台「用户体验监控 > 应用列表」中创建应用后获取。
import armsRum from '@arms/rum-electron';
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'enable: true,
env: 'prod',
version: '1.0.0',
});app 配置
app 对象用于描述应用的扩展信息,便于在 ARMS 控制台中按维度筛选与聚合。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
app | object | 应用扩展信息 | 否 | - |
app.name | string | 应用名称 | 否 | - |
app.version | string | 应用版本 | 否 | - |
app.channel | string | 发布渠道 | 否 | - |
app.env | string | 应用环境 | 否 | - |
app.type | string | 应用类型 | 否 | - |
app.package | string | 包名 | 否 | - |
app.framework | string | 技术框架 | 否 | - |
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'app: {
name: 'MyElectronApp',
version: '2.1.0',
channel: 'stable',
env: 'prod',
type: 'electron',
package: 'com.example.my-app',
framework: 'react',
},
});user 配置
user 对象用于标识当前用户,便于在 ARMS 控制台中按用户维度排查问题。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
user | object | 用户信息对象 | 否 | - |
user.name | string | 用户名称 | 否 | - |
user.tags | string | 用户标签 | 否 | - |
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'user: {
name: '张三',
tags: 'vip,enterprise',
},
});sessionConfig 配置
sessionConfig 控制会话(Session)的采样与生命周期策略。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
sampleRate | number | 会话采样率(0~1) | 否 | 1 |
maxDuration | number | 会话最大持续时间(毫秒) | 否 | - |
overtime | number | 会话超时时间(毫秒) | 否 | - |
sampleRate 取值范围为 0~1,1 表示 100% 采集,0.1 表示 10% 采样。降低采样率可减少上报量与费用。
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'sessionConfig: {
sampleRate: 1,
maxDuration: 4 * 60 * 60 * 1000, // 会话最长 4 小时overtime: 30 * 60 * 1000, // 30 分钟无活动则超时
},
});collectors 配置(主进程采集器)
collectors 控制主进程中各采集器的启用/禁用。每个采集器支持传入 boolean 或 ICollectorConfig 对象进行细粒度配置。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
jsError | boolean | ICollectorConfig | 未捕获异常与 Promise 拒绝 | 否 | true |
consoleError | boolean | ICollectorConfig | console.error 拦截上报 | 否 | true |
crash | boolean | ICollectorConfig | 原生崩溃采集 | 否 | true |
api | boolean | ICollectorConfig | API 请求监控 | 否 | true |
application | boolean | ICollectorConfig | 应用启动指标 | 否 | true |
crash 采集器通过 Electron 的 crashReporter 机制捕获原生崩溃(主进程/渲染进程 Crash),并支持通过 WASM 解析 minidump 文件。
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'collectors: {
jsError: true,
consoleError: false,
crash: true,
api: {
enable: true,
// 可在 ICollectorConfig 中进一步配置过滤器等
},
application: true,
},
});browserCollectors 配置(渲染进程采集器)
仅在 autoInject: true 模式下生效。当 autoInject 为 false 时,渲染进程采集器需在 Browser SDK 侧单独配置。
browserCollectors 控制自动注入到渲染进程的 Browser SDK 中的采集器。每个采集器支持传入 boolean 或 ICollectorConfig 对象。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
perf | boolean | ICollectorConfig | 页面加载性能指标 | 否 | true |
webvitals | boolean | ICollectorConfig | Web Vitals 核心指标(LCP、FID、CLS) | 否 | true |
exception | boolean | ICollectorConfig | 未捕获异常与 Promise 拒绝 | 否 | true |
whiteScreen | boolean | ICollectorConfig | 白屏检测 | 否 | true |
api | boolean | ICollectorConfig | HTTP 请求监控(XHR/Fetch) | 否 | true |
staticResource | boolean | ICollectorConfig | 静态资源加载监控 | 否 | true |
click | boolean | ICollectorConfig | 用户点击事件 | 否 | true |
longTask | boolean | ICollectorConfig | 长任务检测(>50ms) | 否 | true |
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'autoInject: true,
browserCollectors: {
perf: true,
webvitals: true,
exception: true,
whiteScreen: true,
api: true,
staticResource: true,
click: false, // 关闭点击事件采集longTask: true,
},
});tracing 配置
tracing 控制分布式链路追踪(Tracing)的启用与策略。支持传入 boolean 快速开关,或传入 ITracingOption 对象进行详细配置。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
enable | boolean | 是否启用链路追踪 | 否 | false |
sample | number | 采样率(0~1) | 否 | - |
propagatorTypes | Array<string> | 传播协议类型,支持 | 否 | - |
allowedUrls | Array<MatchOption | TraceOption> | 允许注入追踪头的 URL 规则 | 否 | - |
tracestate | boolean | 是否携带 tracestate | 否 | false |
baggage | boolean | 是否携带 baggage | 否 | false |
propagatorTypes 支持多种传播协议,可根据后端服务使用的链路追踪体系选择对应的协议。allowedUrls 支持字符串或正则匹配,仅匹配的请求才会注入追踪头。
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'tracing: {
enable: true,
sample: 0.5,
propagatorTypes: ['tracecontext', 'b3'],
allowedUrls: [
'https://api.example.com',
/\/api\/v\d+\//,
],
tracestate: true,
baggage: false,
},
});其他配置
参数 | 类型 | 描述 | 是否必填 | 默认值 |
autoInject | boolean | 是否自动注入 Browser SDK 到所有 BrowserWindow | 否 | true |
partition | string | 自定义 session partition | 否 | - |
spaMode | boolean | ‘auto’ | ‘hash’ | ‘history’ | SPA 路由追踪模式 | 否 | false |
evaluateApi | Function | 自定义 API 请求解析回调 | 否 | - |
parseViewName | Function | 自定义页面名称解析函数 | 否 | - |
beforeReport | Function | 上报前回调,可修改或丢弃数据 | 否 | - |
properties | Record<string, number | string> | 全局自定义属性 | 否 | - |
autoInject 默认为 true,SDK 会自动将 Browser SDK 注入到所有 BrowserWindow 的渲染进程中。若设置为 false,则需在渲染进程中手动引入并初始化 Browser SDK:
// 渲染进程中手动初始化
import armsRum from '@arms/rum-electron/browser';
armsRum.init({ endpoint: '<YOUR-ENDPOINT>' });armsRum.init({
endpoint: '<YOUR-ENDPOINT>'autoInject: true,
partition: 'persist:main',
spaMode: 'hash',
parseViewName: (url: string) => {
// 自定义页面名称解析逻辑const match = url.match(/\/app\/([^/?#]+)/);
return match ? match[1] : url;
},
beforeReport: (bundle: any) => {
// 返回修改后的数据继续上报,返回 null/undefined 则丢弃该条数据console.log('beforeReport', bundle);
return bundle;
},
properties: {
department: 'engineering',
region: 'cn-hangzhou',
},
});partition用于指定自定义 Electron session partition。当你的BrowserWindow使用了partition配置时,需要在此处指定相同的值,以确保 preload 脚本正确注册到对应的 session。spaMode取值含义如下:false:禁用 SPA 路由追踪(默认行为,仅追踪完整页面加载)true/'auto':自动检测,优先 hash 后 pathname'hash':Hash 路由模式(如 React HashRouter)'history':History API 路由模式(如 React BrowserRouter)
SDK API
armsRum.init(config)
初始化 SDK,必须在 app.ready 之前调用。
init(config: IElectronConfig): Promise<ArmsRum> init() 必须在 Electron app.ready 事件之前调用,因为 SDK 需要在 ready 之前注册自定义协议(rum-event://)以支持降级上报通道。
import { app } from 'electron';
import armsRum from '@arms/rum-electron';
//在 app.ready 之前调用 init
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'env: 'prod',
version: '1.0.0',
});
app.whenReady().then(() => {
// 创建 BrowserWindow 等
});
armsRum.getConfig()
获取当前 SDK 配置。
getConfig(): IElectronConfigconst config = armsRum.getConfig();
console.log('当前配置:', config.endpoint, config.env);armsRum.setConfig()
动态修改 SDK 配置,支持两种调用方式。
// 方式一:按键值对修改单个配置项
setConfig<T extends keyof IElectronConfig>(key: T, value: IElectronConfig[T]): void
// 方式二:传入配置对象批量修改
setConfig(config: Partial<IElectronConfig>): void// 修改单个配置项
armsRum.setConfig('enable', false);
armsRum.setConfig('env', 'daily');
// 批量修改配置const config = armsRum.getConfig();
armsRum.setConfig({
...config,
enable: true,
env: 'prod',
version: '2.0.0',
});armsRum.registerSession(partition)
为使用自定义 partition 的 BrowserWindow 注册 RUM preload 脚本。在 init() 之后调用,建议在创建对应 BrowserWindow 之前调用,以确保首次页面加载即生效。
registerSession(partition: string): Promise<ArmsRum>当 BrowserWindow 使用了自定义 partition(如 persist:main)时,需要调用此方法为该 session 注册 preload 脚本。若在 init() 中已通过 partition 配置指定了默认 partition,则无需再调用此方法。
import armsRum from '@arms/rum-electron';
import { BrowserWindow } from 'electron';
armsRum.init({
endpoint: '<YOUR-ENDPOINT>'
}).then(() => {
// 为自定义 partition 注册 preload
armsRum.registerSession('persist:main');
});
// 之后创建使用该 partition 的窗口
const win = new BrowserWindow({
webPreferences: {
partition: 'persist:main',
// ...
},
});