跳转至

RUM 配置

RUM 初始化配置

FTSdk.initRUMWithConfig(
        new FTRUMConfig()
            .setRumAppId(RUM_APP_ID)
            .setEnableTraceUserView(true)
            .setDeviceMetricsMonitorType(DeviceMetricsMonitorType.ALL.getValue())
            .setEnableTraceUserAction(true)
            .setEnableTraceUserResource(true)
            .setEnableTrackAppUIBlock(true)
            .setEnableTrackAppCrash(true)
            .setEnableTrackAppANR(true)
            .setExtraMonitorTypeWithError(ErrorMonitorType.ALL.getValue())
);
FTSdk.initRUMWithConfig(
    FTRUMConfig()
        .setRumAppId(RUM_APP_ID)
        .setEnableTraceUserView(true)
        .setDeviceMetricsMonitorType(DeviceMetricsMonitorType.ALL.getValue())
        .setEnableTraceUserAction(true)
        .setEnableTraceUserResource(true)
        .setEnableTrackAppUIBlock(true)
        .setEnableTrackAppCrash(true)
        .setEnableTrackAppANR(true)
        .setExtraMonitorTypeWithError(ErrorMonitorType.ALL.getValue())
)
方法名 类型 必须 含义
setRumAppId String 设置 Rum AppId。对应设置 RUM appid,才会开启 RUM 的采集功能,获取 appid 方法
setSamplingRate Float 设置采集率,取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 1。作用域为同一 session_id 下所有 ViewActionLongTaskError 数据
setSessionErrorSampleRate Float 设置错误采集率。当会话未被 setSamplingRate 采样时,若会话期间发生错误,可以采集到错误前 1 分钟范围的数据。取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 0。作用域为同一 session_id 下所有 ViewActionLongTaskError 数据,ft-sdk 1.6.11 以上支持
setEnableTrackAppCrash Boolean 是否上报 App 崩溃日志,默认为 false,开启后会在错误分析中显示错误堆栈数据。关于崩溃日志中混淆内容转换的问题,可参考 符号文件上传ft-sdk 1.5.1 以上版本,可以通过 extraLogCatWithJavaCrashextraLogCatWithNativeCrash 设置在 Java Crash 和 Native Crash 是否显示 logcat
setExtraMonitorTypeWithError Array 设置辅助监控信息,添加附加监控数据到 Rum 崩溃数据中。ErrorMonitorType.BATTERY 为电池余量,ErrorMonitorType.MEMORY 为内存用量,ErrorMonitorType.CPU 为 CPU 占有率,默认不设置
setDeviceMetricsMonitorType Array 设置 View 监控信息,在 View 周期中,添加监控数据。DeviceMetricsMonitorType.BATTERY 监控当前页的最高电流输出情况,DeviceMetricsMonitorType.MEMORY 监控当前应用使用内存情况,DeviceMetricsMonitorType.CPU 监控 CPU 跳动次数,DeviceMetricsMonitorType.FPS 监控屏幕帧率。监控周期可选 DetectFrequency.DEFAULT 500 毫秒、DetectFrequency.FREQUENT 100 毫秒、DetectFrequency.RARE 1 秒,默认不设置
setEnableTrackAppANR Boolean 是否开启 ANR 检测,默认为 falseft-sdk 1.5.1 以上版本,可以通过 extraLogCatWithANR 设置 ANR 中是否显示 logcat
setEnableTrackAppUIBlock Boolean, long 是否开启 UI 卡顿检测,默认为 falseft-sdk 1.6.4 以上版本可以通过 blockDurationMs 控制检测时间范围 [100,),单位毫秒,默认是 1 秒
setEnableTraceUserAction Boolean 是否自动追踪用户操作,目前只支持用户启动和点击操作。该配置依赖 ft-plugin,默认为 false
setEnableTraceUserView Boolean 是否自动追踪用户页面操作,该配置依赖 ft-plugin,默认为 false
setEnableTraceUserViewInFragment Boolean 是否自动追踪 Fragment 类型页面数据,该配置依赖 ft-plugin,默认为 falseft-sdk 1.6.11 以上支持
setEnableTraceUserResource Boolean 是否自动追动用户网络请求,该配置依赖 ft-plugin,仅支持 OkHttp,默认为 false
setEnableResourceHostIP Boolean 是否采集请求目标域名地址的 IP。作用域:只影响 EnableTraceUserResource 为 true 的默认采集。自定义 Resource 采集,需要使用 FTResourceEventListener.FTFactory(true) 来开启这个功能。另外,单个 OkHttp 对相同域名存在 IP 缓存机制,相同 OkHttpClient,在连接服务端 IP 不发生变化的前提下,只会生成一次
setResourceUrlHandler Callback 设置需要过滤的 Resource 条件,默认不过滤
setOkHttpEventListenerHandler Callback ASM 设置全局 OkHttp EventListener,默认不设置
setOkHttpResourceContentHandler Callback ASM 设置全局 FTResourceInterceptor.ContentHandlerHelper,默认不设置,ft-sdk 1.6.7 以上支持,自定义 Resource
addGlobalContext Dictionary 添加自定义标签,用于用户监测数据源区分,如果需要使用追踪功能,则参数 keytrack_idvalue 为任意数值,添加规则注意事项请查阅此处
setRumCacheLimitCount int 本地缓存 RUM 限制数量 [10_000,),默认是 100_000,ft-sdk 1.6.6 以上支持
setEnableTraceWebView Boolean 是否开启通过 Android SDK 采集 WebView 数据,默认为 trueft-sdk 1.6.12 以上支持
setAllowWebViewHost Array 设置允许数据追踪的 WebView host 地址,null 为全采集,默认为 nullft-sdk 1.6.12 以上支持
setViewActivityTrackingHandler FTViewActivityTrackingHandler 用于自定义 Activity 视图的跟踪方式。当 Activity 生命周期事件发生时,此处理器会被调用来决定如何跟踪该 Activity,默认不做处理,ft-sdk 1.6.13 以上支持
setViewFragmentTrackingHandler FTViewFragmentTrackingHandler 用于自定义 Fragment 视图的跟踪方式。当 Fragment 生命周期事件发生时,此处理器会被调用来决定如何跟踪该 Fragment。默认不做处理,ft-sdk 1.6.13 以上支持
setActionTrackingHandler FTActionTrackingHandler 用于自定义用户操作的跟踪方式。当用户执行操作时,此处理器会被调用来决定如何跟踪该操作,默认不做处理,ft-sdk 1.6.13 以上支持

RUM 手动埋点

FTRUMConfig 配置 enableTraceUserActionenableTraceUserViewenableTraceUserResourcesetEnableTrackAppUIBlocksetEnableTrackAppCrashsetEnableTrackAppANR 来实现 ActionViewResourceLongTaskError 的自动采集。若需自定义采集,可通过 FTRUMGlobalManager 手动上报。

Action

使用方法

/**
 * 添加 Action
 *
 * @param actionName action 名称
 * @param actionType action 类型
 * @param property   附加属性参数(可选)
 */
public void startAction(String actionName, String actionType, HashMap<String, Object> property)

/**
 * 添加 Action, 此类数据无法关联 Error,Resource,LongTask 数据
 *
 * @param actionName action 名称
 * @param actionType action 类型
 * @param duration   纳秒,持续时间(可选)
 * @param property   扩展属性(可选)
 */
public void addAction(String actionName, String actionType, long duration, HashMap<String, Object> property)
/**
 * 添加 action
 *
 * @param actionName action 名称
 * @param actionType action 类型
 * @param property   附加属性参数(可选)
 */
fun startAction(actionName: String, actionType: String, property: HashMap<String, Any>)

/**
 * 添加 Action
 *
 * @param actionName action 名称
 * @param actionType action 类型
 * @param duration   纳秒,持续时间(可选)
 * @param property   扩展属性(可选)
 */
fun addAction(actionName: String, actionType: String, duration: Long, property: HashMap<String, Any>)

startAction 内部有计算耗时算法,计算期间会尽量与附近发生的 ResourceLongTaskError 数据做数据关联,设有 100 ms 频繁触发保护,建议用于用户操作类型的数据。如果有频繁调用的需求请使用 addAction,这个数据不会与 startAction 发生冲突,并且不与当下 ResourceLongTaskError 进行数据关联。

代码示例

// 场景1
FTRUMGlobalManager.get().startAction("login", "action_type");

// 场景2: 动态参数
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
FTRUMGlobalManager.get().startAction("login", "action_type", map);

// 场景1
FTRUMGlobalManager.get().addAction("login", "action_type");

// 场景2: 动态参数
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
FTRUMGlobalManager.get().addAction("login", "action_type", map);
// 场景1
FTRUMGlobalManager.get().startAction("login", "action_type")

// 场景2: 动态参数
val map = HashMap<String, Any>()
map["ft_key"] = "ft_value"
FTRUMGlobalManager.get().startAction("login", "action_type", map)

// 场景1
FTRUMGlobalManager.get().addAction("login", "action_type")

// 场景2: 动态参数
val map = HashMap<String, Any>()
map["ft_key"] = "ft_value"
FTRUMGlobalManager.get().addAction("login", "action_type", map)

View

使用方法

/**
 * view 起始
 *
 * @param viewName 当前页面名称
 * @param property 附加属性参数(可选)
 */
public void startView(String viewName, HashMap<String, Object> property)

/**
 * view 结束
 *
 * @param property 附加属性参数(可选)
 */
public void stopView(HashMap<String, Object> property)

/**
 * 更新当前 view loading_time 指标,单位纳秒
 *
 * @param duration duration
 */
public void updateLoadTime(long duration)
/**
 * view 起始
 *
 * @param viewName 当前页面名称
 * @param property 附加属性参数(可选)
 */
fun startView(viewName: String, property: HashMap<String, Any>)

/**
 * view 结束
 *
 * @param property 附加属性参数(可选)
 */
fun stopView(property: HashMap<String, Any>)

/**
 * 更新当前 view loading_time 指标,单位纳秒
 *
 * @param duration duration
 */
fun updateLoadTime(duration: Long)

代码示例

@Override
protected void onResume() {
    super.onResume();

    // 场景 1
    FTRUMGlobalManager.get().startView("Current Page Name");

    // 场景 2: 动态参数
    HashMap<String, Object> map = new HashMap<>();
    map.put("ft_key", "ft_value");
    map.put("ft_key_will_change", "ft_value");
    FTRUMGlobalManager.get().startView("Current Page Name", map)
}

@Override
protected void onPause() {
    super.onPause();

    // 场景 1
    FTRUMGlobalManager.get().stopView();

    // 场景 2 : 动态参数
    HashMap<String, Object> map = new HashMap<>();
    map.put("ft_key_will_change", "ft_value_change"); //ft_key_will_change 的值会在 stopView 时被更新为 ft_value_change
    FTRUMGlobalManager.get().stopView(map);

}
override fun onResume() {
    super.onResume()

    // 场景 1
    FTRUMGlobalManager.get().startView("Current Page Name")

    // 场景 2: 动态参数
    val map = HashMap<String, Any>()
    map["ft_key"] = "ft_value"
    map["ft_key_will_change"] = "ft_value"
    FTRUMGlobalManager.get().startView("Current Page Name", map)
}

override fun onPause() {
    super.onPause()

    // 场景 1
    FTRUMGlobalManager.get().stopView()

    // 场景 2 : 动态参数
    val map = HashMap<String, Any>()
    map["ft_key_will_change"] = "ft_value_change" // ft_key_will_change 这个数值,会在 stopView 时候被修改为 ft_value_change
    FTRUMGlobalManager.get().stopView(map)
}

Error

使用方法

/**
 * 添加错误信息
 *
 * @param log       日志
 * @param message   消息
 * @param errorType 错误类型, ErrorType
 * @param state     程序运行状态
 * @param dateline  发生时间,纳秒(可选)
 * @param property  附加属性(可选)
 */
public void addError(String log, String message, long dateline, ErrorType errorType,
                     AppState state, HashMap<String, Object> property)

/**
 * 添加错误信息
 *
 * @param log       日志
 * @param message   消息
 * @param errorType 错误类型, String
 * @param state     程序运行状态
 * @param dateline  发生时间,纳秒(可选)
 * @param property  附加属性(可选)
 */
public void addError(String log, String message, long dateline, String errorType,
                     AppState state, HashMap<String, Object> property)
/**
 * 添加错误信息
 *
 * @param log       日志
 * @param message   消息
 * @param errorType 错误类型, ErrorType
 * @param state     程序运行状态
 * @param dateline  发生时间,纳秒(可选)
 * @param property  附加属性(可选)
 */
fun addError(log: String, message: String, dateline: Long, errorType: ErrorType, state: AppState, property: HashMap<String, Any>)

/**
 * 添加错误信息
 *
 * @param log       日志
 * @param message   消息
 * @param errorType 错误类型, String
 * @param state     程序运行状态
 * @param dateline  发生时间,纳秒(可选)
 * @param property  附加属性(可选)
 */
fun addError(log: String, message: String, dateline: Long, errorType: String, state: AppState, property: HashMap<String, Any>)

代码示例

// 场景 1:
FTRUMGlobalManager.get().addError("error log", "error msg", ErrorType.JAVA, AppState.RUN);

// 场景 2: 延迟记录发生的错误,这里的时间一般为错误发生的时间
FTRUMGlobalManager.get().addError("error log", "error msg", 16789000000000000000L, ErrorType.JAVA, AppState.RUN);

// 场景 3:动态参数
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
FTRUMGlobalManager.get().addError("error log", "error msg", ErrorType.JAVA, AppState.RUN, map);
// 场景 1:
FTRUMGlobalManager.get().addError("error log", "error msg", ErrorType.JAVA, AppState.RUN)

// 场景 2: 延迟记录发生的错误,这里的时间一般为错误发生的时间
FTRUMGlobalManager.get().addError("error log", "error msg", 16789000000000000000, ErrorType.JAVA, AppState.RUN)

// 场景 3:动态参数
val map = HashMap<String, Any>()
map["ft_key"] = "ft_value"
FTRUMGlobalManager.get().addError("error log", "error msg", ErrorType.JAVA, AppState.RUN, map)

LongTask

使用方法

/**
 * 添加长任务
 *
 * @param log      日志内容
 * @param duration 持续时间,纳秒
 * @param property 附加属性参数(可选)
 */
public void addLongTask(String log, long duration, HashMap<String, Object> property)
/**
 * 添加长任务
 *
 * @param log      日志内容
 * @param duration 持续时间,纳秒
 * @param property 附加属性参数(可选)
 */
fun addLongTask(log: String, duration: Long, property: HashMap<String, Any>)

代码示例

// 场景 1
FTRUMGlobalManager.get().addLongTask("error log", 1000000L);

// 场景 2: 动态参数
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
FTRUMGlobalManager.get().addLongTask("", 1000000L, map);
// 场景 1
FTRUMGlobalManager.get().addLongTask("error log", 1000000L)

// 场景 2: 动态参数
val map = HashMap<String, Any>()
map["ft_key"] = "ft_value"
FTRUMGlobalManager.get().addLongTask("", 1000000L, map)

Resource

使用方法

/**
 * resource 起始
 *
 * @param resourceId 资源 Id
 * @param property   附加属性参数(可选)
 */
public void startResource(String resourceId, HashMap<String, Object> property)

/**
 * resource 终止
 *
 * @param resourceId 资源 Id
 * @param property   附加属性参数(可选)
 */
public void stopResource(final String resourceId, HashMap<String, Object> property)

/**
 * 设置网络传输内容
 *
 * @param resourceId resourceId
 * @param params params
 * @param netStatusBean netStatusBean
 */
public void addResource(String resourceId, ResourceParams params, NetStatusBean netStatusBean)
/**
 * resource 起始
 *
 * @param resourceId 资源 Id(可选)
 */
fun startResource(resourceId: String, property: HashMap<String, Any>)

/**
 * resource 终止
 *
 * @param resourceId 资源 Id
 * @param property   附加属性参数(可选)
 */
fun stopResource(resourceId: String, property: HashMap<String, Any>)

/**
 * 设置网络传输内容
 *
 * @param resourceId resourceId
 * @param params params
 * @param netStatusBean netStatusBean
 */
fun addResource(resourceId: String, params: ResourceParams, netStatusBean: NetStatusBean)

代码示例

// 场景 1
// 请求开始
FTRUMGlobalManager.get().startResource("resourceId");

// ...

// 请求结束
FTRUMGlobalManager.get().stopResource("resourceId");

// 最后,在请求结束之后,发送请求相关的数据指标
ResourceParams params = new ResourceParams();
params.setUrl("https://guance.com");
params.setResponseContentType(response.header("Content-Type"));
params.setResponseConnection(response.header("Connection"));
params.setResponseContentEncoding(response.header("Content-Encoding"));
params.setResponseHeader(response.headers().toString());
params.setRequestHeader(request.headers().toString());
params.setResourceStatus(response.code());
params.setResourceMethod(request.method());

NetStatusBean bean = new NetStatusBean();
bean.setTcpStartTime(60000000);
// ...

FTRUMGlobalManager.get().addResource("resourceId", params, bean);

// 场景 2 :动态参数使用
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
map.put("ft_key_will_change", "ft_value");

FTRUMGlobalManager.get().startResource("resourceId", map);

// ...
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key_will_change", "ft_value_change"); // ft_key_will_change 这个数值,会在 stopResource 时候被修改为 ft_value_change
FTRUMGlobalManager.get().stopResource(uuid, map);
// 场景 1
// 请求开始
FTRUMGlobalManager.get().startResource("resourceId")

// 请求结束
FTRUMGlobalManager.get().stopResource("resourceId")

// 最后,在请求结束之后,发送请求相关的数据指标
val params = ResourceParams()
params.url = "https://guance.com"
params.responseContentType = response.header("Content-Type")
params.responseConnection = response.header("Connection")
params.responseContentEncoding = response.header("Content-Encoding")
params.responseHeader = response.headers.toString()
params.requestHeader = request.headers.toString()
params.resourceStatus = response.code
params.resourceMethod = request.method

val bean = NetStatusBean()
bean.tcpStartTime = 60000000
// ...
FTRUMGlobalManager.get().addResource("resourceId", params, bean)

// 场景 2 :动态参数使用
val map = hashMapOf<String, Any>(
    "ft_key" to "ft_value",
    "ft_key_will_change" to "ft_value"
)
FTRUMGlobalManager.get().startResource("resourceId", map)

// ...
val map = hashMapOf<String, Any>(
    "ft_key_will_change" to "ft_value_change"
)
// ft_key_will_change 这个数值,会在 stopResource 时候被修改为 ft_value_change

FTRUMGlobalManager.get().stopResource(uuid, map)
方法名 必须 含义 说明
NetStatusBean.fetchStartTime 请求开始时间
NetStatusBean.tcpStartTime tcp 连接时间
NetStatusBean.tcpEndTime tcp 结束时间
NetStatusBean.dnsStartTime dns 开始时间
NetStatusBean.dnsEndTime dns 结束时间
NetStatusBean.responseStartTime 响应开始时间
NetStatusBean.responseEndTime 响应结束时间
NetStatusBean.sslStartTime ssl 开始时间
NetStatusBean.sslEndTime ssl 结束时间
NetStatusBean.property 附加属性
ResourceParams.url url 地址
ResourceParams.requestHeader 请求头参数
ResourceParams.responseHeader 响应头参数
ResourceParams.responseConnection 响应 connection
ResourceParams.responseContentType 响应 ContentType
ResourceParams.responseContentEncoding 响应 ContentEncoding
ResourceParams.resourceMethod 请求方法 GET, POST 等
ResourceParams.responseBody 返回 body 内容
ResourceParams.property 附加属性

用户信息绑定与解绑

使用 FTSdk 进行用户绑定和解绑。

使用方法

/**
 * 绑定用户信息
 *
 * @param id 用户 ID
 */
public static void bindRumUserData(@NonNull String id)

/**
 * 绑定用户信息
 */
public static void bindRumUserData(@NonNull UserData data)

/**
 * 解绑用户信息
 */
public static void unbindRumUserData()
/**
 * 绑定用户信息
 *
 * @param id 用户 ID
 */
fun bindRumUserData(id: String)

/**
 * 绑定用户信息
 *
 * @param data 用户信息
 */
fun bindRumUserData(data: UserData)

/**
 * 解绑用户信息
 */
fun unbindRumUserData()

UserData

方法名 含义 必须 注意
setId 设置用户 ID
setName 设置用户名
setEmail 设置邮箱
setExts 设置用户扩展 添加规则请查阅 应用接入

代码示例

// 可以在用户登录成功后调用此方法用来绑定用户信息
FTSdk.bindRumUserData("001");

UserData userData = new UserData();
userData.setName("test.user");
userData.setId("test.id");
userData.setEmail("test@mail.com");
Map<String, String> extMap = new HashMap<>();
extMap.put("ft_key", "ft_value");
userData.setExts(extMap);
FTSdk.bindRumUserData(userData);

// 可以在用户退出登录后调用此方法来解绑用户信息
FTSdk.unbindRumUserData();
// 可以在用户登录成功后调用此方法用来绑定用户信息
FTSdk.bindRumUserData("001")

// 绑定用户更多数据
val userData = UserData()
userData.name = "test.user"
userData.id = "test.id"
userData.email = "test@mail.com"
val extMap = HashMap<String, String>()
extMap["ft_key"] = "ft_value"
userData.setExts(extMap)
FTSdk.bindRumUserData(userData)

// 可以在用户退出登录后调用此方法来解绑用户信息
FTSdk.unbindRumUserData()

文档评价

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