随着系统微服务架构在企业全面的推进和落地的过程中,系统业务的复杂性以及系统服务数量越来越多的情况下,开发和测试不得不面对复杂的服务调用关系,在生产环境出问题的情况下,线上排查定位故障的成本会大幅度的增加,为了解决这个问题需要搭建基于分布式架构的全链路追踪监控系统。分布式系统追踪的英文单词是Distributed Tracing System,使用分布式追踪系统可实现追踪微服务架构中的故障跟踪与定位,以及网络结构和调用链的分析等。分布式追踪系统在结构上来说,主要分为如下几个部分:
在分布式微服务系统中,服务调用往往不是单纯的两个服务之间的调用,往往会涉及很多服务之间的调用,比如在一个具体的业务调用链中,客户端调用服务A,那么这个时候需要经过B,C,D,E等服务然后才可以把结果信息返回给客户端。那么在这个过程中,在调用的开始会生成追踪的ID信息,这个追踪ID会记录下每个调用服务的串联关系的时序图,如下所示的图:
在如上的调用链中,如果服务B出现了问题,那么就会迅速的定位出来,而不需要其他的服务也参与进来。因此使用分布式追踪系统可以很轻松的查看服务调用链的关系图,以及根据路径分析用户行为操作从而对服务进行优化。
在分布式追踪系统中推荐使用Jaeger组件(详细介绍建议查看官方的手册)。Jaeger的组件是特别的多,这地方主要是以Docker的方式来获取以及运行,因此选择All-In-One的组件,获取的命令为:
docker pull jaegertracing/all-in-one:1.33
使用Docker获取jaeger的镜像后,下来直接运行镜像来启动容器,启动的命令具体如下:
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:1.33
启动成功后下来在浏览器中访问http://localhost:16686就会显示Jaeger的主页,具体如下所示:
下来就可以把主流的编程语言可以和Jaeger进行集成从而实现分布式系统中各个服务链路的追踪和分析。感谢您的阅读,后续持续更新Jaeger与主流开发语言框架之间的集成和服务追踪以及服务间的性能分析。