目录
一、搭建APM系统
APM 应用性能管理 Application Performance Management. 对应用各个层面做全方位的监测,期望及时发现可能存在的问题,并加以解决,从而提升系统的性能和可用性。
首先,在数据采集方面,我们可以采用类似Agent的方式,在客户端上植入SDK,由SDK负责采集信息,并且经过采样之后,通过一个固定的接口定期发送给服务端。SDK将这几部分数据转换成JSON格式后,就可以发送给APM通道服务了
- 系统部分:包括数据协议的版本号,以及下面提到的消息头、端消息体、业务消息体的长度;
- 消息头:主要包括应用的标识(appkey),消息生成的时间戳,消息的签名以及消息体加密的秘钥;
- 端消息体:主要存储客户端的一些相关信息,主要有客户端版本号、SDK版本号、IDFA、IDFV、IMEI、机器型号、渠道号、运营商、网络类型、操作系统类型、国家、地区、经纬度等等。由于这些信息有些比较敏感,所以我们一般会对信息加密;
- 业务消息体:也就是真正要采集的数据,这些数据也需要加密
加密的方法是这样的: 我们首先会分配给这个应用一对RSA公钥和私钥,然后SDK在启动的时候,先请求一个策略服务,获取RSA公钥。在加密时,客户端会随机生成一个对称加密的秘钥Key,端消息体和业务消息体都会使用这个秘钥来加密。那么数据发到APM通道服务后,要如何解密呢?客户端会使用RSA的公钥对秘钥加密,存储在消息头里面(也就是上面提到的,消息体加密秘钥),然后APM通道服务使用RSA秘钥解密得到秘钥,就可以解密得到端消息体和业务消息体的内容了.
最后,我们把消息头、端消息体、业务消息体还有消息头中的时间戳组装起来,用MD5生成摘要后,存储在消息头中(也就是消息的签名)。这样,APM通道服务在接收到消息后,可以使用同样的算法生成摘要,并且与发送过来的摘要比对,以防止消息被篡改。
二、需要监控用户的哪些信息
一次请求过程中经历的一系列过程的时间,其中主要包括下面几项
- 等待时间:异步调用时,请求会首先缓存在本地的队列里面,由专门的I/O线程负责,那么在I/O线程真正处理请求之前,会有一个等待的时间。
- DNS时间:域名解析时间。
- 握手时间:TCP三次握手的时间。
- SSL时间:如果服务是HTTPS服务,那么就会有一个SSL认证的时间。
- 发送时间:请求包被发送出去的时间。
- 首包时间:服务端处理后,客户端收到第一个响应包的时间。
- 包接收时间:我们接收到所有数据的时间