SDK配置参考

更新时间:
复制为 MD 格式

用户体验监控提供了一系列SDK配置项,让您能够通过设置参数来满足额外需求。本文介绍鸿蒙(HarmonyOS)应用常用的SDK配置。

启动配置接口

启动配置类的接口需通过链式调用方式与AlibabaCloudRum.withServiceId("${your_serviceId}").withWorkspace("${your_workspace}").withEndpoint("${your_endpoint}").start(this.context.getApplicationContext())一同配置,且需要在调用start函数之前、调用withServiceId函数之后进行相关配置,在start函数后配置无效,可同时配置多项。

自定义APP版本

自定义设备App版本号后,SDK将会上报此版本号,不再使用默认获取的版本号。

withAppVersion(appVersion: string):AlibabaCloudRum

参数

类型

是否必填

说明

参数限制

appVersion

string

自定义的版本号

字符串长度大于0,小于等于64

示例:

AlibabaCloudRum.withServiceId("${your_serviceId}")
      .withWorkspace("${your_workspace}")
      .withEndpoint("${your_endpoint}")
      .withAppVersion("${your_appVersion}")
      .start(this.context.getApplicationContext());

自定义应用环境

区分应用的环境。

withAppEnvironment(environment: string):AlibabaCloudRum

参数

类型

是否必填

说明

参数限制

environment

string

应用环境

字符串长度大于0,小于等于64

示例:

import {AppEnvironment} from '@alibabacloud_rum/harmony_sdk'

AlibabaCloudRum.withServiceId("${your_serviceId}")
      .withWorkspace("${your_workspace}")
      .withEndpoint("${your_endpoint}")
      .withAppEnvironment("${your_appEnvironment}")
      .start(this.context.getApplicationContext());

自定义应用包名

设置应用包名字段。

withAppBundleName(bundleName: string):AlibabaCloudRum

参数

类型

是否必填

说明

参数限制

bundleName

string

应用包名

字符串长度大于0,小于等于64

代码示例:

import {AppEnvironment} from '@alibabacloud_rum/harmony_sdk'

AlibabaCloudRum.withServiceId("${your_serviceId}")
      .withWorkspace("${your_workspace}")
      .withEndpoint("${your_endpoint}")
      .withAppBundleName("${your_appBundleName}")
      .start(this.context.getApplicationContext());

设置用户渠道ID

区分应用发布的渠道。

withChannelID(channelID: string): AlibabaCloudRum

参数

类型

是否必填

说明

参数限制

channelID

string

自定义的渠道号

符串长度大于0,小于等于256

示例:

AlibabaCloudRum.withServiceId("${your_serviceId}")
      .withWorkspace("${your_workspace}")
      .withEndpoint("${your_endpoint}")
      .withChannelID("${your_channelID}")
      .start(this.context.getApplicationContext());

设置设备ID

自定义设备ID。

withDeviceID(deviceID: string): AlibabaCloudRum

参数

类型

是否必填

说明

参数限制

deviceID

string

自定义的设备ID

符串长度大于0,小于等于256

示例:

AlibabaCloudRum.withServiceId("${your_serviceId}")
      .withWorkspace("${your_workspace}")
      .withEndpoint("${your_endpoint}")
      .withDeviceID("${your_deviceId}")
      .start(this.context.getApplicationContext());

数据获取接口

获取设备ID

如果在SDK启动时设置了withDeviceID接口,那么会返回自定义的设备ID。

static getDeviceID(): string

示例:

const deviceID = AlibabaCloudRum.getDeviceID();
console.log("ARSDK: "+deviceID);

自定义信息设置接口

自定义用户名称

SDK支持设置与用户相关的信息,从而完成性能数据与实际用户相关联的需求场景。

static setUserName(userName: string);

参数

类型

是否必填

说明

参数限制

userName

string

用户名称标识

字符串可为空或空串。

字符串小于等于256,且不包含特殊字符(只允许数字、字母、中文、冒号、空格、斜杠、下划线、连字符、英文句号、星号、叹号、@、#,空或空串无效),否则接口调用失败

示例:

AlibabaCloudRum.setUserName("testName");

自定义用户扩展信息

SDK 支持设置更加详细的用户附加信息,从而满足数据分析与实际用户相关联的需求场景。

  • 设置用户更加详细的附加信息

    static setUserExtraInfo(attributes: Map<string, Object>); 

    参数

    类型

    是否必填

    说明

    参数限制

    attributes

    Map<string, Object>

    用户附加信息

    Mapkv最多64对 超过则保留其中64个,key长度小于256,超过则该key无效,且不包含特殊字符(只允许数字、字母、冒号、空格、斜杠、下划线、连字符、英文句号、@,空或空串无效);value小于512,超过则截取

    示例:

    const userInfo = new Map<string, Object>();
    userInfo.set("aliasName", "lemonx");
    userInfo.set("userRegion", "hangzhou");
    userInfo.set("type", "svip");
    AlibabaCloudRum.setUserExtraInfo(userInfo);
  • 追加用户更加详细的附加信息

    static addUserExtraInfo(attributes: Map<string, Object>); 

    参数

    类型

    是否必填

    说明

    参数限制

    attributes

    Map<string, Object>

    用户附加信息

    Mapkv最多64对 超过则保留其中64个,key长度小于256,超过则该key无效,且不包含特殊字符(只允许数字、字母、冒号、空格、斜杠、下划线、连字符、英文句号、@,空或空串无效);value小于512,超过则截取

    示例:

    const userInfo = new Map<string, Object>();
    userInfo.set("age", "18");
    AlibabaCloudRum.addUserExtraInfo(userInfo);

自定义全局属性

自定义全局属性设置后,新产生的数据会自动携带该业务属性信息,用于分析与业务属性相关联的需求。

static setExtraInfo(attributes: Map<string, Object>); 

参数

类型

是否必填

说明

参数限制

attributes

Map<string, Object>

属性信息

Mapkv最多64对 超过则保留其中64个,key长度小于256,超过则该key无效,且不包含特殊字符(只允许数字、字母、冒号、空格、斜杠、下划线、连字符、英文句号、@,空或空串无效);value小于512,超过则截取

示例:

const properties = new Map<string, Object>();
properties.set("param1", "test1");
properties.set("param2", "test2");
AlibabaCloudRum.setExtraInfo(userInfo);

追加全局属性。

static addExtraInfo(attributes: Map<string, Object>); 

参数

类型

是否必填

说明

参数限制

attributes

Map<string, Object>

属性信息

Mapkv最多64对 超过则保留其中64个,key长度小于256,超过则该key无效,且不包含特殊字符(只允许数字、字母、冒号、空格、斜杠、下划线、连字符、英文句号、@,空或空串无效);value小于512,超过则截取

示例:

const properties = new Map<string, Object>();
properties.set("param3", "test3");
AlibabaCloudRum.addExtraInfo(userInfo);
说明

调用 setExtraInfo 方法时会清空历史设置的属性信息。如您需要追加新的属性信息,建议您通过 addExtraInfo 方法。

自定义异常

  • 传参类型为 Error:调用接口并传入相应参数,可完成自定义异常数据的统计功能。

    static setCustomException(error: Error); //直接将 Exception 或 Throwable 对象传入即可

    参数

    类型

    是否必填

    说明

    参数限制

    error

    Error

    异常对象

    系统抛出的异常对象,非null

    示例:

    try {
       throw new Error("Test");
    } catch (err) {
       AlibabaCloudRum.setCustomException(err);
    }
  • 传参类型为自定义参数:更为灵活的重载配置如下,可用于业务型异常上报,对应参数可填充符合参数限制的任意内容,控制台直接展示。

    static setCustomException(errorType: string, causeBy?: string, errorDump?: string); 

    参数

    类型

    是否必填

    说明

    参数限制

    errorType

    string

    异常类型(必要)

    字符串长度大于0,小于等于256,否则接口调用失败。

    causeBy

    string

    异常原因

    字符串可为空或空串。

    字符串小于等于512,超长截取。

    errorDump

    string

    异常信息

    超出10000字符时会被切割

    示例:

    try {
        throw new Error("Test");
    } catch (err) {
        if (err instanceof Error) {
           AlibabaCloudRum.setCustomException(err.name, err.message, err.stack);
        }
    }

自定义事件

调用接口并传入相应参数,可完成自定义事件数据统计功能。

static setCustomEvent(eventName: string, group?: string, value?: number, snapshots?: string, attributes?: Map<string, string>)

参数

类型

是否必填

说明

参数限制

eventName

string

事件名称

字符串长度小于等于256,超长会截取

group

string

事件分组

字符串可为空或空串。

字符串小于等于256,超长截取。

value

number

事件值

-

snapshots

string

事件快照

字符串可为空或空串。

字符串小于等于7000,超长截取。

attributes

Map<string, Object>

kv存储信息

可为空,转JSON后长度在7000字符以内

示例:

AlibabaCloudRum.setCustomEvent("注册");

const info = new Map<string, string>();
info.set("eventNumber","10001");
info.set("eventName", "alibaba");
info.set("eventXX", "xxx");
AlibabaCloudRum.setCustomEvent("登录失败", "事件分组", undefined, "事件快照", info);

自定义日志

调用接口并传入相应参数,可完成自定义日志数据统计功能。

static setCustomLog(content: string, name: string, snapshots?: string, level?: string, attributes?: Map<string, Object>);

参数

类型

是否必填

说明

参数限制

content

string

日志信息

字符串长度大于0小于等于10000,超长截取。

name

string

日志名称

字符串长度大于0且小于等于256。

snapshots

string

日志快照

字符串可为空或空串。

字符串小于等于7000,超长截取。

level

string

日志等级

字符串长度大于0且小于等于 256,默认为 INFO。

attributes

Map<string, Object>

日志附加信息

Map可为空或空集。

JSON后,字符串长度与content共享,否则接口调用失败。

示例:

AlibabaCloudRum.setCustomLog("日志内容1");

const logInfo = new Map<string, string>();
logInfo.set("logXX","xxx");
AlibabaCloudRum.setCustomEvent("日志内容2", "日志名称", "日志快照", "ERROR", logInfo);

自定义资源

SDK支持上报自定义网络资源请求数据,可以记录 HTTP/HTTPS 等类型请求的详细信息,包括请求状态、性能指标和链路追踪信息。当前鸿蒙端支持的网络框架包含系统网络库hms.collaboration.rcpohos.net.httpohos.net.webSocketohos.net.socket.TCPSocket以及三方网络库 axios。对于目前尚未支持采集的三方网络库,比如 retrofit,可以调用自定义资源 API 进行手动埋点上报数据。

static setCustomResource(type: string, url: string, method: string, statusCode: number, errorMessage: string,
    success: boolean, provider?: string, measuring?: ResourceMeasuring, traceContext?: TraceContext);

参数

类型

是否必填

参数说明

参数限制

type

string

资源类型

字符串长度大于0且小于等于64,超长截取。

url

string

请求的完整 URL 地址

字符串长度大于0且小于等于1024,超长截取。

method

string

HTTP 请求方法

字符串长度大于0且小于等于24,超长截取。

statusCode

number

HTTP 响应状态码

HTTP 状态码,如:200、404、500等。

errorMessage

string

错误信息描述

字符串长度大于0且小于等于256,超长截取。

success

boolean

请求是否成功

true,成功;false,失败。

provider

string

服务提供商标识,如:"CDN"

字符串长度大于0且小于等于256,超长截取。

measuring

ResourceMeasuring

资源性能指标

ResourceMeasuring 类型,类型定义详见下文。

traceContext

TraceContext

链路追踪上下文信息

TraceContext 类型,类型定义详见下文。

ResourceMeasuring 用于记录网络请求的性能指标。

属性名

类型

是否必填

说明

参数限制

duration

number

资源加载总耗时

单位:毫秒(ms)

size

number

资源大小

单位:字节(byte)

connectDuration

number

TCP 连接耗时

单位:毫秒(ms),默认 0

sslDuration

number

SSL/TLS 握手耗时

单位:毫秒(ms),默认 0

dnsDuration

number

DNS 解析耗时

单位:毫秒(ms),默认 0

redirectDuration

number

重定向耗时

单位:毫秒(ms),默认 0

firstByteDuration

number

首字节耗时(TTFB)

单位:毫秒(ms),默认 0

downloadDuration

number

下载响应耗时

单位:毫秒(ms),默认 0

示例

使用示例:
// 创建性能指标
const measuring = new ResourceMeasuring(
  1250,  // duration: 总耗时 1250ms
  102400,  // size: 100KB
  50,  // connectDuration: TCP连接 50ms
  30,  // sslDuration: SSL握手 30ms
  20,  // dnsDuration: DNS解析 20ms
  0,   // redirectDuration: 无重定向
  100, // firstByteDuration: 首字节 100ms
  1050 // downloadDuration: 下载 1050ms
);

AlibabaCloudRum.setCustomResource(
  'api',
  'https://api.example.com/data/list',
  'POST',
  200,
  '',
  true,
  'cdn',
  undefined,
  measuring
);

进阶功能-自定义链路追踪

如果需要进阶配合自定义链路追踪功能,需要手动将生成的追踪头插入到 HTTP 请求中,并将 TraceContext 作为参数传入 setCustomResource 中,以实现分布式链路追踪。

TraceContext用于分布式链路追踪的上下文信息,支持 W3C Trace Context 和 Apache SkyWalking 协议。

参数

类型

是否必填

说明

参数限制

protocol

TraceProtocol

链路追踪协议类型

TraceProtocol.W3CTraceProtocol.SKYWALKING

traceId

string

Trace ID

调用 TraceIdGenerator.generateTraceId 方法生成。

spanId

string

Span ID

调用 TraceIdGenerator.generateSpanId 方法生成。

parentSpanId

string

父 Span ID

格式要求同 spanId,可选

sampled

number

采样标志

1=采样,0=不采样,默认 1

示例

import { 
  TraceContext, 
  TraceProtocol, 
  TraceIdGenerator, 
  TraceHeaderWriter,
  ResourceMeasuring,
  AlibabaCloudRum 
} from '@alibabacloud_rum/harmony_sdk'

// 1. 创建 TraceContext
const traceId = TraceIdGenerator.generateTraceId(TraceProtocol.W3C);
const spanId = TraceIdGenerator.generateSpanId(TraceProtocol.W3C);
const traceContext = new TraceContext(TraceProtocol.W3C, traceId, spanId, undefined, 1);

// 2. 生成追踪头
const traceHeaders = TraceHeaderWriter.generateHeadersRecord(traceContext);

// 3. 发起 HTTP 请求,带上追踪头
// ... 将 traceHeaders 插入到网络请求的 header 中
  
// 4. 创建性能指标
const measuring = new ResourceMeasuring(
  1250,  // duration: 总耗时 1250ms
  102400,  // size: 100KB
);

// 5. 上报自定义数据
AlibabaCloudRum.setCustomResource(
  'api',
  'https://api.example.com/data',
  'POST',
  response.responseCode,
  '',
  true,
  undefined,
  measuring,
  traceContext  // 传入 TraceContext
);