网络监控使用教程(Android)
Android的网络监控功能还在灰度验证中,请接入业务先尝试小范围灰度试用,质量验证符合预期后,再正式上线。
SDK版本为:com.tencent.bugly:bugly-pro:4.4.2.5
功能简介
网络监控是通过okhttp3的EventListener来监控Http请求的质量,包含请求耗时,成功率,传输数据量,以及请求过程中重要阶段的耗时。
当前通过无插桩的方案实现以下能力:
业务按SDK接入指引,使用BuglyListenerFactory创建的OkHttpClient,支持监控http/https请求的质量。
提供BuglyURLStreamHandlerFactory,代理系统原生的HttpURLConnection,从而支持监控使用系统原生接口实现的http/https请求。
当前暂不支持:
不使用原生接口,或者okhttp3实现的http请求。
组件使用了okhttp3库实现http请求,但是没有调整OkHttpClient过程,即没有使用BuglyListenerFactory作为OkHttpClient的EventListener.Factory。
打开配置
网络监控本地配置默认是关闭的,需要业务在Portal上开启配置。
设置/SDK配置/功能配置,添加net_quality的配置项。
- 调整采样率及其他配置项。
sample_ratio :设备采样率,表示允许多少设备开启网络监控。
daily_report_limit:表示网络监控的数据上报,每天最多允许上报多少次。网络监控的数据是合并上报的,具体合并的情况由max_batch_count, min_batch_cout 来决定。
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-pro:4.4.2.5"
接口使用
- 代理系统原生的HttpURLConnection。
如果不想代理「使用系统原生接口」的Http请求,则无需执行这一步。
如果想代理「使用系统原生接口」的Http请求,推荐在Application#onCreate 时尽早开启代理。
// 开启代理
BuglyURLStreamHandlerFactory.init();
开启代理后,也可以通过以下代码关闭。
// 关闭代理
BuglyURLStreamHandlerFactory.reset();
- 修改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。
BuglyListenerFactory.getInstance().removeFactory(myFactory)
- 可参考演示代码,构建测试数据。
- 构建异步请求。
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) {
//
}
检查开启
- 检查配置拉取,确认网络监控允许开启。
- 日志标签: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}
- 检查网络监控是否正常开启。
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
- 检查数据上报。
2024-08-07 13:10:56.226 4939-5009/com.tencent.demo.buglyprodemo D/RMonitor_report: reportInternal-onSuccess, pluginName: net_quality, dbId: 7
数据分析
功能入口
HTTP
HTTP模块包含所监控到的所有HTTP请求的质量数据,如成功率,请求耗时,重要阶段耗时,传输数据大小等。
- HTTP模块默认展示最近7天的数据,包含按上报量排序的Top 域名和接口,整体趋势,统计分布情况,以及按URL聚合列表。
- 趋势分析中,包含丰富的指标。
- 统计分布支持针对丰富的字段进行分析。
- URL列表当前根据域名和接口进行聚合。
- 除了整体趋势外,我们可能比较关注,部分域名和接口的数据。此时,可以使用多维下钻来完成。点击期望分析的域名,或者接口,即可在右侧查看指定域名/接口的数据。
网络错误
网络错误包含所有HTTP请求错误的数据,通过错误率指标来衡量HTTP请求的成功率。
- 趋势分析
- 错误列表
错误列表当前通过HTTP 方法 + 域名 + 接口 + 错误码 进行聚类
- 错误分布
与HTTP类似,网络错误也提供丰富的下钻字段,方便用户分析各维度的上报占比。