1.什么是APM
大盘监控并不能覆盖所有case
- 客户端bug
- 网络抖动
- 创建订单
- DNS解析失败
- ......
\
应用性能管理APM:对应用各个层面做全方位的监测,期望及时发现可能存在的问题,并加以解决,从而提升系统的性能和可用性
不同于服务端监控:终端用户的使用体验
2.如何搭建APM系统
数据采集+存储+展示
\
数据采集:Agent
通过在客户端植入SDK,SDK采集信息后发送到固定接口
指标包括:监控网络情况、监控客户端卡顿情况、垃圾收集数据等等
消息体格式:
-
系统部分:包括数据协议的版本号,以及下面提到的消息头、端消息体、业务消息体的长度;\
-
消息头:主要包括应用的标识(appkey),消息生成的时间戳,消息的签名以及消息体加密的秘钥\
-
端消息体:主要存储客户端的一些相关信息,主要有客户端版本号、SDK 版本号、IDFA、IDFV、IMEI、机器型号、渠道号、运营商、网络类型、操作系统类型、国家、地区、经纬度等等。由于这些信息有些比较敏感,所以我们一般会对信息加密\
-
业务消息体:也就是真正要采集的数据,这些数据也需要加密。\
\
3.需要监控用户的哪些信息
网络
手段:埋点,安卓可以使用OkHttpClient
\
一系列过程的耗时:
1.等待时间:
2.DNS时间:
3.握手时间:TCP三次握手时间(通过长链接,减少握手次数)
4.SSL时间:咯过服务时HTTPS服务,那么存在SSL认证时间
5.发送时间:请求包被发出去的时间
6.首包时间:服务端处理后,客户端收到第一个响应包时间
7.包接收时间:接收所有数据的时间
作用:
- 网络时延代表用户的真实体验
- 性能优化的风向标
- 监控 CDN 链路质量
可以通过APM上报服务出错的问题
4.总结
-
从客户端采集到的数据可以用通用的消息格式,上传到 APM 服务端,服务端将数据存入到 Elasticsearch 中,以提供原始日志的查询,也可以依据这些数据形成客户端的监控报表;\
-
用户网络数据是我们排查客户端,和服务端交互过程的重要数据,你可以通过代码的植入,来获取到这些数据;
-
无论是网络数据,还是异常数据,亦或是卡顿、崩溃、流量、耗电量等数据,你都可以通过把它们封装成 APM 消息格式,上传到 APM 服务端,这些用户在客户端上留下的踪迹可以帮助你更好地优化用户的使用体验。
-
接口的响应时间只是我们监控系统中很小的一部分,搭建一套端到端的全链路的监控体系,才是你的监控系统的最终形态