本文介绍了 Android 和 iOS 平台流量监控模块的简介、配置以及功能的使用。
Android
功能背景
流量监控的核心功能在于它能够实时监控应用程序的数据使用情况。通过实时监控,可以随时了解应用的数据消耗情况,及时发现流量使用异常等问题。这有助于用户避免超出数据计划或产生额外费用。此外,流量监控还能帮助用户优化应用程序的功耗,减少不必要的数据请求,提供更高效的用户体验,并延长设备的电池寿命。流量监控还具备下钻到域名级别的能力,用户可以了解哪些域名或服务消耗了大量的流量,从而采取相应的措施来优化数据传输。
打开配置
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
上报日志
1、10分钟流量上报日志(每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, 无网络情况填3frontState; // 前后台状态,前台填1,后台填2host; // 域名,例如www.baidu.comstartTimeStamp; // 网络请求开始时间戳,精确到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:peerNametype: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 的归因,除自定义场景外,也暂时只支持到域名级别。
异常个例的流量归因中,还可以点击某种归因,查看所有满足归因条件的异常个例。
