1. 概述
在项目中随着项目的业务越来越复杂,以及项目的微服务化等,导致平常的项目中出现如:同一次操作日志散乱等现象,对通过查询日志的方式排查问题造成极大困扰.因此迫切需要一种可以追溯当前链路操作日志的手段。
当有效的日志信息不是很明显,我们需要追溯本次操作整个链路的关键信息时,由于日志的散乱,可能在此事上面耗费较大的精力并且结果还可能有误,分布式链路追踪就是为了解决这种情况下出现的。
2. 追踪实现
在分布式链路跟踪中有两个重要的概念:跟踪(trace)和 跨度( span)。trace 是请求在分布式系统中的整个链路视图,span 则代表整个链路中不同服务内部的视图,span 组合在一起就是整个 trace 的视图。
追踪和跨度的由三个参数实现:TraceId、SpanId、ParentSpanId
TraceId:
日志中每一次操作都有该次操作的唯一TraceId,属于当前操作的所有相关日志都记录了本次的TraceId,回溯的时候只需要通过TraceId就能获取到指定操作的全链路日志信息,这样可以保证获取的信息都是咱们想要的,节省了不少排查问题的精力。
TraceId可以解决项目微服务化下操作日志散乱的现象。
SpanId、ParentSpanId:
在分布式链路跟踪中有两个很重要的概念:跟踪(trace)和跨度(span)。trace是请求在分布式系统中的整个链路视图,Span则代表整个链路中不同服务内部的视图,Span组合在一起就是整个trace的视图。
请求到达每个服务后,服务都会为请求生成SpanId,而随请求一起从上游传过来的上游服务的spanid都会被记录成ParentSpanId,
当前服务生成的 spanid 随着请求一