本文介绍了 Android 和 iOS 平台网络监控模块的简介、配置以及数据的分析。
Android
功能简介
网络监控是通过 OkHttp3的 EventListener 来监控 HTTP 请求的质量,包含请求耗时、成功率、传输数据量,以及请求过程中重要阶段的耗时。
当前通过无插桩的方案可以实现以下能力:
业务按 SDK 接入指引,使用 BuglyListenerFactory 创建的 OkHttpClient,支持监控 HTTP / HTTPS 请求的质量。
提供 BuglyURLStreamHandlerFactory,代理系统原生的 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.Bugly:Bugly:4.4.2.5"
接口使用
1. 代理系统原生的 HttpURLConnection。
如果不想代理使用系统原生接口的 HTTP 请求,则无需执行这一步;如果想代理使用系统原生接口的 HTTP 请求,推荐在 Application#onCreate 时尽早开启代理。
BuglyURLStreamHandlerFactory.init();
开启代理后,也可以通过以下代码关闭代理。
BuglyURLStreamHandlerFactory.reset();
2. 修改 OkHttpClient 创建过程。
创建 OkHttpClient 时,使用 BuglyListenerFactory。
OkHttpClient client = new OkHttpClient.Builder()
.eventListenerFactory(BuglyListenerFactory.getInstance())
.build();
如果是异步执行,使用 BuglyCallbackProxy 封装 Callback。
call.enqueue(new BuglyCallbackProxy(callback));
如果业务本身也有自己的 EventListener.Factory,通过以下代码添加 Factory。
BuglyListenerFactory.getInstance().addFactory(myFactory)
不需要 Factory 时,通过以下代码移除 Factory。
BuglyListenerFactory.getInstance().removeFactory(myFactory)
3. 可参考演示代码,构建测试数据。
构建异步请求。
OkHttpClient client = new OkHttpClient.Builder().eventListenerFactory(BuglyListenerFactory.getInstance()).build();
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
call.enqueue(new BuglyCallbackProxy(callback));
构建同步请求。
OkHttpClient client = new OkHttpClient.Builder().eventListenerFactory(BuglyListenerFactory.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.Buglyprodemo 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.Buglyprodemo I/RMonitor_net_quality: getFactory, ret: true, factory: null, errorMsg: null
2024-08-07 13:09:03.786 4939-4939/com.tencent.demo.Buglyprodemo I/RMonitor_net_quality: setURLStreamHandlerFactory success.
2024-08-07 13:09:03.786 4939-4939/com.tencent.demo.Buglyprodemo I/RMonitor_net_quality: init, true
2024-08-07 13:09:03.807 4939-4997/com.tencent.demo.Buglyprodemo I/RMonitor_net_quality: start
3. 检查数据上报。
2024-08-07 13:10:56.226 4939-5009/com.tencent.demo.Buglyprodemo 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 不同的是,iOS 端没有进行复杂的上报频率控制(因两端实现的差异)。因此,不需要配置 max_batch_count,min_batch_count 等字段。
说明:
虽然网络监控与流量监控同属于一个模块,但其功能配置上不存在依赖和排他性,因此二者可以分别配置开启和关闭。同时限于数据量的原因,不建议将网络监控的采样率调整得过高。
SDK 接入
网络监控属于 SDK 的子模块(与流量监控同属于网络监控模块),不需要业务单独接入,只需要升级到支持的 SDK 版本即可包含对应的模块。因此在初始化 SDK 时,确保启用的模块中包含了 Bugly_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 类似,网络错误也提供丰富的下钻字段,方便用户分析各维度的上报占比。