系统服务化或者后续的微服务架构,做到了服务隔离,业务解耦,在带来这些便利的同时也回答带来了排查错误不好定位的问题,因为一个请求往往横跨多个服务。还有异步化等等。
所以一套好用的满足分布式系统的全链路跟踪分析系统可以说是整个服务化最重要的基础组件。
实现方式
俩部分,日志采集,和日志分析
日志采集
- 采集:业务几乎无感,业务服务只需要向自身所在的服务器写本地log,服务器有一个采集日志的agent,根据采集中心的配置去制定的目录下实时同步log给日志处理中心。
- 处理:通过storm spark flink将日志进行清洗,实时的我们可以打到hbase和es中。离线的我们可以存到hadoop中
- 日志格式:全局的TraceID(本次调用的全局ID)+RpcID(本次调用中该节点的ID,建议是有顺序的支持嵌套调用比如1,1.1,1.1.1)+时间戳+数据标签(分类)+业务组件+msg
- 采集管控:业务高峰可能产生很多log我们对于一段时间内相同的log要进行降频控制防止对业务有影响
常用组件
- agent开发(java、go)
- 数据通道kafka,rocktmq
- 日志清洗spark,flink,strom
- 数据存储es,hbase,hadoop
具体应用场景
- 监控业务:原始的监控服务器指标已经不满足服务化的需求了,因为有可能服务指标良好,但是服务已经不可用了,我们可以通过这台全链路的跟踪系统通过自己埋点构建有个性的监控系统
- 实时全链路排查:加强业务的管控,实时的了解业务调用链路的异常出在哪里,快速排错,进行有针对性的优化
- 离线的全链路分析:针对业务架构师,可以分析一段时间内接口调用情况,查看一个接口整体的设计。比如:依赖是否和合理,强依赖是否平均耗时较高,若依赖是否可以异步化等,使我们服务的编排更合理,架构更加贴近业务。