Application Performance Management(APM),
hi all:
对于 周五的日志管理讨论,我查了一些资料,下面是我的一些研究:
行为日志
一个APP 主要有 UI 和 网络请求, 通过这两个方向考虑:
1.网络请求情况的统计—来自后台
包含用户id号,请求时间,请求内容,请求时长,请求次数
oschina采用的也是这种机制
2.UI上用户交互的统计—来自移动端
The easy way - 通过log日志埋点
使用AOP统一封装Android应用内的日志类
AndroidAppLog 上篇博文的实现,可以直接拿来用.或者改改用注解的方式.
A lightweight android logger support auto tag, file logging and show logs on screen
The hard way-无埋点
这个就难咯~
找了几篇文章,有提到一些思路,看着很腻害的样子~
newrelic的android sdk实现原理解析(一)
Android无埋点数据收集SDK关键技术
美团点评前端无痕埋点实践
ios
RunTime应用实例–关于埋点的思考
网易NeteaseAPM iOS SDK技术实现分享
Crash上报
现在市面普遍的三方平台有: 友盟 和 腾讯的 bugly
友盟是比较早提出这个功能,但从用户反馈来说bugly 更好
可以查看bugly混淆后的jar包结构:
主要有三个分包 anr,h5,jni.
从而可以看出:
一个Android APP 除了有java代码外,
还会和 前端的 html5 ,
以及 c语言交互,
所引发的奔溃也要捕获.
而这讲引出三个问题:
怎么捕获 java代码层的crash?
怎么捕获 jni代码层crash?
怎么捕获 h5代码层crash?
首先:java代码层的crash,主要的问题是 ANR的问题:
为什么有ANR的问题?
因为,有人提issue 在 Google上了
幸运的是,下面提到了解决方案
[ANR-WatchDog]
A simple watchdog that detects Android ANRs (Application Not Responding).
还有有一个现成的Android端crash解决方案:
[acra]
Application Crash Reports for Android
介绍:
所以这是个专门研究Android crash的机构,
这个项目已经运行5年,已经有3665个star
很多Google play的 应用都引入了它,
而且这个项目1个月前还在更新中,
也有现成的服务器ACRA/acralyzer ,
如果需要用公司自己的服务器 acra完全支持,集成了Post/Put 请求方式,返回的是json/from
其他对其介绍博文:
安卓崩溃信息收集框架ACRA 这篇博文 简单介绍ACRA5年来的成就,客户端配置,服务器的配置,数据库信息收集情况.
[翻译]如何安装ACRA-一个Android应用Crash跟踪系统 这篇博文 更详细介绍了acra的服务器配置.
android的崩溃报告(crash dump)
android应用崩溃分析开源工具acra研究以及使用心得
再见友盟!Acra详细分析 -Part 1
但是它不能catch ANR error 和 jni Error. 但是watchdog 可以和它配合使用.
——-所以 java层的crash catch 到此解决———————-
怎么捕获 jni代码层crash?
Android平台的崩溃捕获机制及实现 提到了 Google Breakpad
GitHub 上有零星几个 Breakpad 的 demo
道听途说,均未试验过.
相关资料:
stack overflow Catching exceptions thrown from native code running on Android
Handling Java Errors from Native Methods
Android应用开发笔记:JNI的崩溃捕获及google-breakpad的使用
ireaderlab/AndroidCrashReport
android和iOS平台的崩溃捕获和收集
——-所以 jni层的crash catch 提出方向,需要验证———————-
怎么捕获 h5代码层crash? TODO
H5 Crash 研究
H5 页面上发生的错误会传递到 Java 和更底层的 Native 直到容器异常退出,在退出的那一刻,容器会将堆栈写入到日志中,当下次打开容器时(也可能是定时上报)就会上报这些堆栈信息。
最后:今天在地铁上玩office文档查看器时,看到了Tencent的log日志,
存在地址/storage/emulated/0/tencent/,
通过log日志的内容可以发现 QQ HD也是用 watch dog ,
因为 log里面出现了 watch dog 的关键字 和 watch dog 运行模式是 没几分钟就会询问一次,
印证上面的讨论。
其他方向:
1.通过查看Tencent的日志可以推测出Tencent的日志收集。
2.或者反编译 bugly_crash_release.jar
相关资料:
如何做出类似 bugly 这样的崩溃捕获 SDK (3/20 更新 breakpad)
AndroidCrashHandler Android崩溃处理流程设计
from https://www.zhihu.com/question/23078534/answer/161589894
埋点的一些关键点,至于第三方统计平台可以参考:GA、友盟、 talking data、 腾讯数据平台等。
一、通用数据全量收集冷启动事件:App第一次启动时的,版本号、设备ID、渠道、内存使用情况,磁盘使用情况等信息前后台事件:App进入前台或者后台控件点击事件:某个控件(包括页面上控件和弹窗中控件)被用户点击列表浏览事件:某个列表的哪些条目被用户浏览了位置事件:上报用户地理位置信息其它事件:
省略描述二、业务数据收集与具体业务相关的数据收集,这个需要根据实际业务来设定,然后把数据传过来。
三、前端展现【用户数据展现】新增、活跃(DAU/WAU/MAU)、留存(次日/3日/7日…)、PV/UV…
【行为数据】访问时长、访问路径、登录次数、登录天数、
【性能数据】访问页面性能( 页面打开性能 & 操作响应性能 )、不可用时长、事件量…
【业务数据】根据不同业务有不同的业务数据,那移动端手游来说,会有:充值金额、充值人数、ARPU\ARPPU、LTV、ROI…有了一、二最原始埋点的数据源,只要对数据源进行清洗,然后建立数据模型,后面前端展现就很好做了,其实一切的一切关键点都在于前期埋的点多不多,全不全,如果基础工作没做好,后面的前端展现都是空谈。