技术夜校第九期由Aix和Klone大神带来《高可用之日志回捞-移动端问题排查利器》的分享。
资深Android开发,
拥有多年的客户端研发、性能优化、架构设计经验
Aix
资深iOS开发
拥有多年客户端研发及性能优化经验
Klone
开发同学工作中最苦恼的事情是什么?解bug
哪类bug使我们比较头疼?个案、难复现、无可用信息
当你终于解决了一个BUG的时候,然后你发现BUG只不过是变得更隐蔽了而已
如何才能解决这个烦恼,高可用平台中的日志回捞会给你答案~
01
现有的困境
1、线上运行场景复杂
设备碎片化严重、网络环境复杂、个性化配置丰富、用户操作难以预测
2、线上Bug排查的痛点
线上四个场景组合起来就很容易出现各种个案问题排查这些问题就会有以下几个痛点:
沟通反馈时效低、模拟场景难、问题难以复现、无可用信息
3、日志获取面临的问题
分析线上问题最需要的是日志信息,而在日志获取时,会面临以下五个问题:
线上日志不全、被动获取时效低、日志全量上报,耗流量,耗资源、定向获取日志困难、权限限制,协助成本大
解决方案—高可用平台
02
面对以上问题,可以通过哪些方式解决呢?
1、流程优化
平台主动下发指令→客户端收到指令上报日志→上报成功飞书通知→日志捞取成功支持一键下载
案例:
在原日常问题处理流程中,客户联系用户、手动上报日志到阿里云、有权限同学协助获取日志三个环节比较耗时
原日常问题处理流程 ▲
流程优化后,可实现问题处理自动化
优化后问题处理流程 ▲
2、策略优化
透明化:平台记录日志回捞任务,历史任务全员可见
条件过滤:日志获取支持时间段过滤,减少用户流量消耗,提升日志上报成功率
审批制:对日志回捞任务执行审批流程,保证日志获取合理性
内容完善:制定日志上报格式,类型,公共参数,保证日志信息更清晰&全面
3、平台整体架构设计
平台系统主要包括四个角色:客户端、服务端、日志平台、存储日志的阿里云,具体架构设计图如下:
一次日志回捞任务背后整个运行过程是怎么样的?
4、平台实现还需要解决5个问题
(1)指令如何实时下发?
实时通知是通过push的方式实现的,审批任务通过后,服务端通过appkey来区分调用不同业务的push后端,然后通过useID查到单个用户的pushToken,调用第三方,精准的定向下发,push到用户的设备上。
(2)实时下发指令未到达如何处理?
若在有效期内,用户的APP未打开过,则push可能在有效期内会失效。在此情况下,如何保证任务仍能够将日志回捞?在客户端启动时,通过指令的方式,在客户端做一个主动请求,将userID携带过来,通过userID,服务端会在任务表中查这个userID是否有对应的任务。若有,返回任务信息,并返回给客户端,任务上报的指令。
(3)日志上传时客户端对本地文件的处理过程?
指定下发之后,客户端对本地文件的处理过程如下:
(4)上传成功后阿里云如何通知服务端?
客户端请求阿里云时,会给阿里云一个客户端的回调接口,由阿里云通过主动调用的方式,来调用服务端,并将taskid携带过来,服务端通过taskid来判定任务是否执行成功。若执行成功,则对任务状态进行更新,并返回回调结果,再返回至客户端。
(5)日志下载如何保证安全性?
整个日志下载鉴权的过程主要是为了保证日志下载地址能够进行校验,不会被泄露。这个过程在下载的时候服务端每次会向阿里云重新生成一条新的下载地址,时效性为10分钟,阿里云返回生成的地址后,由客户端触发进行平台的下载。
03
客户端SDK介绍
SDK分为日志SDK和高可用SDK,日志SDK主要用于本地日志记录,高可用SDK主要用于日志上报和日志回捞。
日志SDK
日志SDK的使用如下:
初始化参数介绍:
日志类型:
日志等级:
tag 标签:
默认tag 值为:du_logger
使用自定义标签可以对日志记录进一步筛选
开发可以添加自己的标签,比如业务类型、添加日志的开发人员、业务模块等等
本地存储策略:
日志文件默认有效期为 14天,过期则会被删除
单个日志文件大小为1m,超过1m则新建一个日志文件
高可用SDK
上报触发时机
回捞上报分为push触发和APP启动上报。Push触发主要是为了及时性,但由于push的触达率、过期等问题,会导致收不到,对应的兜底方案就是APP启动上报。主动上报是用户主动触发或客服引导用户触发。
上报文件策略
根据日期选择要压缩的日志文件,压缩包限制默认为100m(可配置),过大删除,上传成功后清除本地压缩包
平台介绍
04
高可用平台主要是五个关键词:移动端日志回捞、定向回捞、个案排查、即时获取、简单易用
05
未来规划
目前高可用平台还仅仅只提供了对得物的支持,未来还会提供对国际端等其他APP的支持,现在的是单任务场景,未来可以做到单条任务支持到多个用户,提高任务的效率;后续还将扩展日志类型,如增加网络日志、日志行为等;增加日志类型展示和日志过滤,以提高排查效率;目前平台仅支持日志文件的捞取,后续会对图片、特定文件做捞起策略。
高可用平台还在优化、完善,相信后续Aix和 Klone会带给大家更多关于高可用平台的分享。
1
END
1
【得物技术】
扫一扫关注公众号