微博客户端客户端全链路日志监控系统
2020-05-01 本文已影响0人
dengbinhero
无所不在的部署 && 持续的监控
![](https://img.haomeiwen.com/i65272/b2c5993d38f7adb1.jpg)
一:技术背景
1:我们遇到了什么问题?
在一个微服务的架构系统中,客户端每一个请求,都会形成一个复杂的、很长的调用链路,每一次请求涉及到查询各种API和多种服务请求。例如:客户端app发起一次搜索请求,大概流程如下:
1):客户端通过调用mapi发起请求
2):mapi收到请求后向平台发起多个请求,查询私信聊天记录、查询联系人、查询群聊天记录,而每个环节都可能出问题,但是对客户端来说,都是mapi请求错误,并不知道具体是哪个环节出问题。
二:目标要求
1:记录整个链路所有环节耗时
2:记录整个链路的所有错误
3:可视化
4:数据分析
5:错误快速定位
6:合理的采样率
三:实现方案
1:调用示意图 a 2:调用过程追踪-怎么串联整个链路
3:采样率
1:调用示意图
1):当用户发起一个请求时,首先到达前端A服务,然后分别对B服务和C服务进行RPC调用;
![](https://img.haomeiwen.com/i65272/7342081288badd2b.jpg)
2):B服务处理完给A做出响应,但是C服务还需要和后端的D服务和E服务交互之后再返还给A服务,最后由A服务来响应用户的请求;
2:调用过程追踪-怎么串联整个链路
![](https://img.haomeiwen.com/i65272/7caf37268538a4e4.jpg)
1):traceId:本次请求的唯一ID,贯穿整个请求链路,使用uuid做为唯一标志符。
2):spanId:链路中每个请求单元的id,例如一次语音的分片上传,一条语因分为1、2、3三片,三次上传请求,每一次分片上传都有自己对应的spanId,而每个分片都是同一个traceId 3):parentId:上一个请求的spanId,例如分片2的parentId则是分片1的spanId,这样整个链路的层级顺序都串起来了。
3:采样率
主要采取三个采样策略:
1):错误日志全部上采样上传
2):vip用户全采样上传
3):普通用户采用1/1000的采样率上传
文章引用: