微盟技术 | APP日志远程采集系统


一、前言

日志在应用产品的整个生命周期中扮演着重要的角色。在软件开发过程中,日志能够帮助开发人员及时识别程序中的逻辑错误;而在产品发布到市场后,通过分析相关日志,可以解决各种疑难杂症。

二、背景

微盟直播 APP 上线后,商家反馈的一些直播问题例如直播卡顿、直播黑屏、用户评论没有正常展示、推流异常,在我们的测试中无法复现。因为直播 APP 具有特殊性,直播体验受到多个因素的影响,包括网络、手机性能和用户操作行为等。网络问题可能导致直播流畅度和清晰度的下降,而服务器问题可能导致直播卡顿和断流等问题。此外,直播流的编码格式、码率和分辨率等因素也可能影响直播的质量。客户端问题也是可能导致直播 APP 无法正常运行或出现各种异常的原因。出现相同现象的问题可能涉及多个方面,需要进行综合分析和处理。为了快速定位问题并解决,我们需要拿到相应的日志信息。

         微盟技术 | APP日志远程采集系统


然而,目前大多数 APP 获取日志的方法是在某个页面提供上传日志的按钮,这种方法存在一个较大的弊端。如果用户此时不在指定页面,或者不想停止当前操作,日志文件无法上传,也就无法及时协助排查并解决问题。例如直播 APP,用户如果在直播过程中出现问题,此时用户是不方便暂停直播去上传日志信息,所以就需要一种快速拿到 APP 日志的方式,并且不需要用户特殊操作。

三、需求分析

为了快速定位和解决用户直播过程中的问题,提升产品质量和用户体验,需要在用户无感知的前提下拿到相关日志,并不影响用户的正常操作。所以需要 APP 日志采集回捞功能,并且日志采集回捞功能要满足以下条件。

1.安全稳定:必须保证写入的日志安全,以防敏感数据泄露,同时写入操作持续时间和应用的生命周期基本一致,不能因为日志组件影响应用程序性能,导致整个应用的崩溃、卡顿不流畅。

2.完整不丢失:日志组件本身就是为排查异常问题而生,在应用前台、后台常规场景,被杀掉,要保证日志的完整性

3.精准回捞:能准确回捞用户反馈的日志。

4.合理存储:管理存储日志,尽量少占用用户设备的存储空间。

         

四、技术方案  

4.1  整体技术方案

APP日志采集回捞整体的流程 :

         微盟技术 | APP日志远程采集系统


1、在直播 APP 中嵌入日志采集模块,并记录需要捕获的日志信息,如 APP 运行状态、错误日志等。

2、用户使用 APP 时,日志采集模块会自动捕获相关信息,并将其保存在本地设备中,等待上传。

3、当 APP 出现问题需要排查时,研发通过特定的方式触发日志上传,也支持用户手动上传。

4、APP 将本地缓存的日志文件上传到服务器中,研发人员可以通过服务器获取日志文件,进行分析和处理。

5、研发人员分析日志文件,定位问题,并进行解决。

         

4.2 具体实现

按照整体功能具体可以分为日志采集、日志回捞、管理后台三部分。

4.2.1 日志写入

日志写入是日志采集回捞组件的重要部分。写入模块采用多线性支持异步写入,AES 加密,支持日志自动管理。

         

微盟技术 | APP日志远程采集系统


为什么要设置阀值?
设置阀值可以避免长时间保存日志,导致文件不断增大,占用用户手机存储空间。我们根据实际情况,使用20天作为阀值来对日志进行管理。当 APP 存储的日志文件超过20天时,系统会自动删除旧日志文件,从而保证用户手机存储空间的大小。这样,我们可以在不占用过多用户存储空间的前提下,保证日志的完整性和有效性,为后续的问题排查提供有力支持。

微盟技术 | APP日志远程采集系统


为什么要用 AES 加密?
安全性高:AES是一种非常安全的加密算法,采用AES加密后的数据极难被破解,可以保证数据在传输过程中的安全性。速度快:AES加密算法的加密速度非常快,可以在极短的时间内对数据进行加密,可扩展性强:AES加密算法可以根据需要进行扩展,可以使用不同的密钥长度进行加密,从而更好地保护数据的安全性。
这是AES加密后的日志文件:
微盟技术 | APP日志远程采集系统

4.2.2日志回捞

利用 GTSDK 实现回捞。 用户使用 APP 时候绑定用户信息(wid bosId vId)和GTID。出现问题时候,管理后台检测用户推送在线状态,并进行指令推送。APP 收到指令推送后,把本地的日志 文件和第三方 SDK 相关的日志文件进行打包并整体压缩上传服务端。

         

微盟技术 | APP日志远程采集系统


为什么要将第三方SDK日志打包上传?

在直播过程中,应用程序使用一些第三方 SDK,如 IMSDK、推拉流 SDK。在排查一些疑难问题时,需要相关的 SDK 日志,因此为了排查具体原因提高应用程序的稳定性,需要将第三方 SDK 日志一起打包上传。

微盟技术 | APP日志远程采集系统


关于日志的压缩方式,目前有两种方式:集中压缩和流式压缩。流式压缩的缺点是压缩比较低,但随着日志写入同时进行压缩,占用存储空间少,把压缩时间分散在整个生命周期内,避免 CPU 峰值飙升问题。相比之下,集中压缩的优点是压缩比较高,但缺点是占用设备存储空间太大,容易造成 CPU 峰值飙升。考虑到稳定性、使用场景、存储空间、后期解密等问题,我们采用了集中压缩方式。最后,压缩的目的是为了减少上传日志所消耗的流量,同时避免文件过大影响上传成功率。

微盟技术 | APP日志远程采集系统

 微盟技术 | APP日志远程采集系统

         

4.2.3管理平台

管理平台支持用户标识,包括手机号、用户 Wid、场次 ID 查询。发送采集指令,查询相关日志,解密日志文件。

微盟技术 | APP日志远程采集系统 

微盟技术 | APP日志远程采集系统  

五、实践  

通过上线日志采集回捞功能,在后续实际使用过程中陆续解决了用户评论不展示、黑屏、推流失败的疑难问题。

微盟技术 | APP日志远程采集系统


例如,一位用户反馈在使用微盟直播 APP 开播的时候,提示了推流失败,而新创建的直播间也无法开播。出现此问题会影响用户的正常直播,但本地却无法复现此问题。此时,使用日志采集回捞可以迅速拿到用户手机本地日志和相关第三方 SDK日志并分析原因。通过分析日志,发现在推流之前 SDK 内会有一个前置认证,SDK 的校验会在本地下载一个文件。如果特殊情况或者文件保存时出错了,就会创建一个空文件或错误文件。校验时只会使用本地错误的文件进行校验,导致用户不管怎么样都检验失败,不能推流。查到问题后可以先给用户提供临时解决方案,例如在设置中清除手机数据,使 SDK 重新下载认证文件并认证,让用户尽快进行直播。接下来,可以在后续的版本中修复这一问题,避免类似的问题再次发生。

         

六、总结  

APP日志采集回捞发挥了极为重要的作用。它能够解决那些难以复现的问题,提高产品质量和用户体验。可以快速定位问题,自动上传日志,节省排查问题的时间。而且,能够分析用户的日志,加速问题解决速度。所有反馈问题都可以通过日志找到根源,以此优化 APP 的性能和功能,提高产品竞争力。     

微盟技术 | APP日志远程采集系统             

本文主要从日志写入、日志采集、管理平台三个方面介绍微盟直播APP日志采集回传一些实践,解决用户反馈的一些问题,其中有些方面还可以进一步优化,欢迎感兴趣的同学一起交流优化。


推荐阅读
webpack4 module-federation and more
微盟移动端组件库 Titian Mobile 对外开源
须臾现码虫,一键纳乾坤——Hubble在微盟微前端中的应用
打造通用外部资源管理器,加强前端服务稳定性和可控性

本篇文章来源于微信公众号:微盟技术中心

本文来自投稿,不代表TakinTalks稳定性技术交流平台立场,如若转载,请联系原作者。

(0)
上一篇 2023年4月14日 下午4:17
下一篇 2023年4月28日 下午5:09

相关推荐

发表评论

登录后才能评论