流量

最近更新时间:2025-10-10 16:35:52

我的收藏
本文介绍了 Android 和 iOS 平台流量监控模块的简介、配置以及功能的使用。

Android

功能背景

流量监控的核心功能在于它能够实时监控应用程序的数据使用情况。通过实时监控,可以随时了解应用的数据消耗情况,及时发现流量使用异常等问题。这有助于用户避免超出数据计划或产生额外费用。此外,流量监控还能帮助用户优化应用程序的功耗,减少不必要的数据请求,提供更高效的用户体验,并延长设备的电池寿命。流量监控还具备下钻到域名级别的能力,用户可以了解哪些域名或服务消耗了大量的流量,从而采取相应的措施来优化数据传输。

打开配置

应用配置 > SDK 配置 中,开启流量监控。
traffic:指单次进程流量,可以配置设备采样率。
traffic_detail:指十分钟流量,可以配置设备采样率,以及异常流量的阈值。
这些流量阈值的单位是MB 。
建议在接入阶段,两项的设备采样率( sample_ratio )都设置为1.0 ,即全采样。
配置
配置字段名
意义
总流量过大
total_limit_in_megabyte
10分钟消耗的流量超过配置的流量异常阈值。
后台流量过大
backend_limit_in_megabyte
在后台场景10分钟消耗的流量超过配置的后台异常流量阈值。
移动流量过大
mobile_limit_in_megabyte
10分钟消耗的移动流量超过配置的移动异常流量阈值。
自定义场景流量过大
custom_limit_in_megabyte
业务定义的自定义场景,流量消耗是否超过定义的阈值。


SDK 接入

流量监控的接入的方式与其他例如卡顿、Java 内存泄漏等功能没有太大的差异,SDK 的各项监控功能一般采用客户端和后台配置共同控制的方式,也就是说客户端必须要在初始化的时候执行以下语句,同时在后台配置开启流量监控功能,才会真正开启。
RumProBuilder.addMonitor(RumProMonitorName.TRAFFIC);
RumProBuilder.addMonitor(RumProMonitorName.TRAFFIC_DETAIL);

RumPro.init(application, RumProBuilder);

开启成功日志

12-20 16:13:27.470 21408 21449 I TrafficMonitor: traffic monitor start

上报日志

110分钟流量上报日志(每10分钟上报一次)
04-22 01:04:26.665 17704 17758 D RMonitor_report_Json: url: ********************** eventName: traffic_detail, client_identify: ****6415c412a9ed43cd0f43d601****

2、进程流量指标上报日志(重启进程5分钟后上报)
04-22 01:04:26.665 17704 17758 D RMonitor_report_Json: url: ********************* eventName: traffic, client_identify: *****415c412a9ed43cd0f43*****

自定义场景流量上报接口

CustomTrafficStatistic.getInstance().addHttpToQueue(SocketInfo socketInfo);
socketInfo 还有很多其他字段,统计流量只需要给以下字段来赋值,其他成员变量可以暂时忽略。
class SocketInfo {
receivedBytes; // 收到多少字节
sendBytes; // 发送了多少字节
networkType; // 网络类型,WiFi流量填1, 5G流量填2, 无网络情况填3
frontState; // 前后台状态,前台填1,后台填2
host; // 域名,例如www.baidu.com
startTimeStamp; // 网络请求开始时间戳,精确到ms
......
}

iOS

功能背景

流量监控的核心功能在于它能够实时监控应用程序的数据使用情况。通过实时监控,可以随时了解应用的数据消耗情况,及时发现流量使用异常等问题。这有助于用户避免超出数据计划或产生额外费用。此外,流量监控还能帮助用户优化应用程序的功耗,减少不必要的数据请求,提供更高效的用户体验,并延长设备的电池寿命。流量监控还具备下钻到域名级别的能力,用户可以了解哪些域名或服务消耗了大量的流量,从而采取相应的措施来优化数据传输。

打开配置

若要启用流量监控,还需要确保 SDK 配置中开启了流量监控模块。关于 SDK 配置的内容,可以参考 SDK 配置
关于流量监控的配置内容,与 Android 端一致,可以参考 Android 流量监控打开配置 进行查看。

SDK 接入

流量监控属于 SDK 的子模块,不需要业务单独接入,只需要升级到支持的 SDK 版本即可包含对应的模块。因此在初始化 SDK 时,确保启用的模块中包含了 RumPro_MODULE_NETWORK 或使用 RM_MODULE_ALL 类型,具体可参考 SDK 初始化
注意:
流量监控需要2.7.53及以后的版本支持。

流量监控开启验证

成功开始流量监控功能后,出现以下日志则表明成功开启流量监控功能:
[RumPro][Event][RumProNetworkMonitor.mm:281]RumPro_MODUEL_NETWORK start network monitor: 1048576, 1048576, 1048576
流量监控会在进程启动时和每10 min上报进程流量情况或10min流量情况,当触发上报时,会有如下日志:
[RumPro][Event][RMReportQueue.m:601][Report] [resource.traffic] report id:xxxx error:(null)

// or

[RumPro][Event][RMReportQueue.m:601][Report] [resource.traffic_detail] report id:xxxx error:(null)

自定义接口

默认情况下,SDK 会监控 App 中的所有流量,包括使用 NSURLSession 进行的 HTTP 网络请求,及使用 BSD Socket 进行的 TCP 网络请求。
但限于 BSD Socket 的限制,监控信息仅能提供 IP 和端口的信息。为了让业务能够更自由的实现网络流量监控,终端性能监控 Pro 提供了自定义网络监控的接口。
在 RumProNetworkTracer+Public.h 和 RumPro_network_tracer.hpp 中,定义了用户自定义网络流量监控的接口,分别用于在 OC 层或 C++ 层进行调用,实现自定义网络流量监控。
其中调用 tracer 对象的 traceConnectComplete 接口,会自动将此 tracer 记录到的流量监控信息记录到 SDK 并上报。
注意:
因 iOS 12.0及以前的系统上发现网络监控存在一定的问题,故在2.7.55.1版本后,网络监控不再支持 iOS 12.0及以前的设备,而是仅支持 iOS 13.0及以上系统。
例如 :
NSString *peerName = @"..."; // 连接 URL 等信息
RumProNetworkTracer *tracer = [RumProNetworkTracer tracerWithPeerName:peerName
type:RumProNetworkConnectHTTP|RumProNetworkConnectCustom];
// 此方法将会将 tracer 对象注入到 _self 对象中,在一些异步处理中,将其注入到上下文对象中,便于后期找回来
[tracer injectToObj:_self];
// 连接开始
[tracer traceConnectStart];
// 记录连接发送数据
[tracer traceConnectSend:request.HTTPBody.length];

// ... 其他逻辑

// 通过上下文对象,从注册的对象中取回 tracer 对象
RumProNetworkTracer *tracer = [RumProNetworkTracer tracerFromObj:_self];
// tracer 完成,将其记录到 SDK 中
[tracer traceConnectComplete];
其他接口的使用类似,具体可以参考文件中的定义信息。

功能使用

以下内容以 Android 平台流量监控模块为例进行说明,iOS 可参考如下内容 。

指标分析

指标分析包含三个 Tab ,单次进程流量、10分钟流量以及自定义场景流量。
单次进程流量:描述的是一个进程在一次运行中所消耗的所有流量。
10分钟流量:描述的是命中采样的设备,在 10 分钟的监控周期内所消耗的所有流量。
自定义场景流量:描述的是业务关注的场景下,单次进程流量或者 10 分钟流量。

三个 Tab 的指标都包含趋势分析、统计分布和流量归因。
无论单次进程流量,还是十分钟流量,一次上报算作一次样本。
上报量表示的就是样本量。如下图所示,上报量为10.6857万,表示共有10.6857万个上报。平均值和 P25等分位值是基于这些上报样本计算。

统计分布展示了这些样本在指定维度的分布情况。
按 App 版本分布,可以看到2.30.0.56版本上报的样本最多,占比64.43%。

单击查看更多,可以看到上报明细。

流量归因当前支持域名,URL 以及网络库。


异常分析

在统计周期内,如果流量消耗超出配置的阈值,即判定会发生异常。
检测到异常后,会采集详细的连接明细,上报后台。用户可以配置自己的异常检测阈值。
配置
配置字段名
意义
总流量过大
total_limit_in_megabyte
10分钟消耗的流量超过配置的流量异常阈值。
后台流量过大
backend_limit_in_megabyte
在后台场景10分钟消耗的流量超过配置的后台异常流量阈值。
移动流量过大
mobile_limit_in_megabyte
10分钟消耗的移动流量超过配置的移动异常流量阈值。
自定义场景流量过大
custom_limit_in_megabyte
业务定义的自定义场景,流量消耗是否超过定义的阈值。
异常分析页,展示异常的指标及趋势。
异常指标中,分子即异常的上报个例。分母则是,十分钟流量的上报样本量。
当前定义的异常都是基于10分钟流量统计的结果。

指标
说明
异常次数
筛选条件下的流量异常的上报量。
异常率
筛选条件下的流量异常的上报量/筛选条件下采样总的上报量 (10min, 只支持时间范围 + App 版本)。
影响用户数
筛选条件下的流量异常影响用户数。
影响用户率
筛选条件下的流量异常影响用户数/筛选条件下采样总的上报用户数(10min)。
影响设备数
筛选条件下的流量异常影响设备数。
影响设备率
筛选条件下的流量异常影响设备数/筛选条件下采样总的上报设备数(10min)。

选择筛选条件后,用户可以查看满足条件的异常个例。
用户可以根据异常流量,或者采集时间等维度对异常个例进行排序,以找到期望的个例进行分析。

点击异常个例,即可进入异常个例详情,查看连接明细。

个例详情的连接明细,详细展示这次统计周期内,所监控到的每一个连接的流量消耗明细。


流量归因

无论是指标分析,还是异常分析都包含流量归因。
指标分析:

异常分析:

流量归因目标是针对消耗的流量进行归因分析。目前只支持根据域名、URL 以及网络库进行归因。

当前对于 URL 的归因,除自定义场景外,也暂时只支持到域名级别。
异常个例的流量归因中,还可以点击某种归因,查看所有满足归因条件的异常个例。