本文介绍了 Android 和 iOS 平台网络监控模块的简介、配置以及数据的分析。
Android
功能简介
网络监控是通过 OkHttp3的 EventListener 来监控 HTTP 请求的质量,包含请求耗时、成功率、传输数据量,以及请求过程中重要阶段的耗时。

当前通过无插桩的方案可以实现以下能力:
业务按 SDK 接入指引,使用 RumProListenerFactory 创建的 OkHttpClient,支持监控 HTTP / HTTPS 请求的质量。
提供 RumProURLStreamHandlerFactory,代理系统原生的 HttpURLConnection,从而支持监控使用系统原生接口实现的 HTTP / HTTPS 请求。
打开配置
网络监控本地配置默认是关闭的,需要业务在 Portal 上开启配置。

sample_ratio:设备采样率,表示允许多少设备开启网络监控。
daily_report_limit:表示网络监控的数据上报,每天最多允许上报多少次。网络监控的数据是合并上报的,具体合并的情况由 max_batch_count 和 min_batch_count 来决定。
max_batch_count:表示一条网络监控的数据上报中,最多包含多少条 HTTP 请求质量的明细数据,默认是100。
min_batch_count:表示一条网络监控的数据上报中,最少包含多少条 HTTP 请求质量的明细数据,默认是50 。

注意:
在自测阶段,推荐修改 sample_ratio 为1,自测结束后,根据实际情况调整设备采样率。
在自测阶段,推荐修改 min_batch_count 为5或者10,这样可以将数据尽快上报到后台。自测结束后,推荐根据业务的实际情况来调整,或者还原为默认值。
SDK 接入
升级 SDK
implementation "com.tencent.RumPro:RumPro:4.4.2.5"
接口使用
1. 代理系统原生的 HttpURLConnection。
如果不想代理使用系统原生接口的 HTTP 请求,则无需执行这一步;如果想代理使用系统原生接口的 HTTP 请求,推荐在 Application#onCreate 时尽早开启代理。
// 开启代理RumProURLStreamHandlerFactory.init();
开启代理后,也可以通过以下代码关闭代理。
// 关闭代理RumProURLStreamHandlerFactory.reset();
2. 修改 OkHttpClient 创建过程。
创建 OkHttpClient 时,使用 RumProListenerFactory。
OkHttpClient client = new OkHttpClient.Builder().eventListenerFactory(RumProListenerFactory.getInstance()).build();
如果是异步执行,使用 RumProCallbackProxy 封装 Callback。
call.enqueue(new RumProCallbackProxy(callback));
如果业务本身也有自己的 EventListener.Factory,通过以下代码添加 Factory。
RumProListenerFactory.getInstance().addFactory(myFactory)
不需要 Factory 时,通过以下代码移除 Factory。
RumProListenerFactory.getInstance().removeFactory(myFactory)
3. 可参考演示代码,构建测试数据。
构建异步请求。
OkHttpClient client = new OkHttpClient.Builder().eventListenerFactory(RumProListenerFactory.getInstance()).build();Request request = new Request.Builder().url(url).build();Call call = client.newCall(request);call.enqueue(new RumProCallbackProxy(callback));
构建同步请求。
OkHttpClient client = new OkHttpClient.Builder().eventListenerFactory(RumProListenerFactory.getInstance()).build();Request request = new Request.Builder().url(url).build();try (Response response = call.execute()) {if (response.isSuccessful()) {InputStream inputStream = response.body().byteStream();...}} catch (IOException exception) {//}
检查开启
1. 检查配置拉取,确认网络监控允许开启。
日志标签:RMonitor_config: dump for onConfigLoad。
如果监控项允许开启,会有 net_quality:true 类似的日志;如果监控项不允许开启,则有 net_quality:false 类似的日志。
2024-08-07 13:08:37.143 4707-4777/com.tencent.demo.RumProprodemo I/RMonitor_config: dump for onConfigLoad, {battery_metric:false, memory_quantile:true, io:false, list_metric:false, work_thread_lag:false, sub_memory_quantile:false, fd_leak:false, looper_metric:true, activity_leak:true, battery_element:false, battery:false, launch_metric:true, battery_ele_metric:false, looper_stack:true, java_memory_ceiling_hprof:false, native_memory:true, http:false, traffic_detail:false, net_quality:true, device:false, db:false, big_bitmap:true, traffic:false}
2. 检查网络监控是否正常开启。
2024-08-07 13:09:03.768 4939-4939/com.tencent.demo.RumProprodemo I/RMonitor_net_quality: getFactory, ret: true, factory: null, errorMsg: null2024-08-07 13:09:03.786 4939-4939/com.tencent.demo.RumProprodemo I/RMonitor_net_quality: setURLStreamHandlerFactory success.2024-08-07 13:09:03.786 4939-4939/com.tencent.demo.RumProprodemo I/RMonitor_net_quality: init, true2024-08-07 13:09:03.807 4939-4997/com.tencent.demo.RumProprodemo I/RMonitor_net_quality: start
3. 检查数据上报。
2024-08-07 13:10:56.226 4939-5009/com.tencent.demo.RumProprodemo D/RMonitor_report: reportInternal-onSuccess, pluginName: net_quality, dbId: 7
网络异常
结果码:一般用于描述 HTTP 连接建立阶段的错误。
Android 平台只有 0 和 -1两个结果码:0表示默认值,-1表示连接建立阶段发生了异常,具体异常的原因由异常信息来描述。
HTTP 状态码:在 HTTP 协议中用于表示服务器对请求的处理结果的三位数字代码。每个状态码都有特定的含义,用于指示请求的成功、重定向、客户端错误或服务器错误等不同情况。以下是一些常见的 HTTP 状态码及其含义:
200 OK:请求成功,服务器成功处理了请求。
301 Moved Permanently:永久重定向,请求的资源已被永久移动到新的 URL。
400 Bad Request:客户端错误,服务器无法理解请求的语法或参数。
404 Not Found:资源未找到,服务器无法找到请求的资源。
500 Internal Server Error:服务器错误,服务器在处理请求时遇到了意外错误。
异常信息:描述异常的具体原因,如域名解析异常,Unable to resolve host "www.xxx.com": No address associated with hostname。
异常类型:描述异常的分类,就是对异常信息进行分类,如异常信息是 Unable to resolve host "www.xxx.com": No address associated with hostname,提取的异常类型为 Unable to resolve host。
iOS
功能简介
网络监控是用来监控 App 的网络使用情况,通过监控通用网络请求组件 NSURLSession 来实现对 HTTP 请求的耗时、成功率、传输数据量以及请求过程中的重要阶段耗时等数据进行的监控。
打开配置
与流量监控类似,网络监控在开了子模块的同时,还需要对应的 SDK 配置打开才会生效,关于 SDK 配置,可以参考 SDK 配置。
关于网络监控的配置内容,与 Android 端一致,可以参考 Android 网络监控打开配置 进行查看。
与 Android 不同的是,iOS 端没有进行复杂的上报频率控制(因两端实现的差异)。因此,不需要配置 max_batch_count,min_batch_count 等字段。
说明:
虽然网络监控与流量监控同属于一个模块,但其功能配置上不存在依赖和排他性,因此二者可以分别配置开启和关闭。同时限于数据量的原因,不建议将网络监控的采样率调整得过高。
SDK 接入
网络监控属于 SDK 的子模块(与流量监控同属于网络监控模块),不需要业务单独接入,只需要升级到支持的 SDK 版本即可包含对应的模块。因此在初始化 SDK 时,确保启用的模块中包含了 RumPro_MODULE_NETWORK 或使用 RM_MODULE_ALL 类型,具体可参考 iOS SDK 接入指引 。
说明:
不同于流量监控,网络质量监控由于需要理解网络协议,因此 SDK 目前仅支持使用 NSURLSession 进行 HTTP 请求的情况。若对应的请求是通过 NSURLConnection、CFNetwork 或其他基于 Socket 的连接,则不会被网络监控覆盖。
网络监控需要2.8.1.5及以后的版本支持。
数据分析
以下内容以 Android 平台网络监控模块为例进行说明,iOS 可参考如下内容。
查询

HTTP
HTTP 模块包含所监控到的所有 HTTP 请求的质量数据,如成功率、请求耗时、重要阶段耗时、传输数据大小等。
HTTP 模块:默认展示最近7天的数据,包含按上报量排序的 Top 域名和接口、整体趋势、统计分布情况,以及按 URL 聚合列表。

趋势分析中,支持发生次数、用户数、成功率、链接复用率等多项指标,用户可根据自己的需求来选择相应的指标查看分析图。

域名列表:当前根据域名和接口进行聚合。

统计分布中,支持发生次数、用户数、成功率、链接复用率等多项指标,用户可根据自己的需求来选择相应的指标查看统计分布图。

单击设置可以选择多个下钻指标展示。

单击查看更多即可查看当前下钻指标的上报明细 。

除了整体趋势外,我们可能比较关注,部分域名和接口的数据。此时,可以使用多维下钻来完成。点击期望分析的域名,或者接口,即可在右侧查看指定域名/接口的数据。
网络错误
网络错误包含所有 HTTP 请求错误的数据,通过错误率指标来衡量 HTTP 请求的成功率。

趋势分析中支持错误量 / 错误率、上报量、影响用户数占比、影响用户数、上报用户数等多个指标,用户可按需选择展示 。

域名列表:域名列表当前通过
HTTP 方法 + 域名 + 接口 + 错误码进行聚类,列表支持展示 URL、结果码、HTTP 状态码等多个维度,可单击 设置进行字段的设置。

统计分布:与 HTTP 类似,网络错误也提供丰富的下钻字段,方便用户分析各维度的上报占比。
