zipkin调用链追踪,主要可以知道,服务与服务之间的调用关系,调用的时间,数据信息
1. Trace:一个完整Trace 由一组Span组成,这一组Span必须具有相同的TraceID;Span具有父子关系,处于子节点的Span必须有parent_id,Span由一组 Annotation和BinaryAnnotation组成。整个Trace Tree通过Trace Id、Span ID、parent Span ID串起来的
1.1 Trace ID:起始(根)服务生成的TraceID
Span ID:调用下游服务时所生成的Span ID
Parent Span ID:父Span ID
Is Sampled:是否需要采样
Flags:告诉下游服务,是否是debug Reqeust
2. span:表示一次完整RPC调用,是由一组Annotation和BinaryAnnotation组成。是追踪服务调用的基本结构,多span形成树形结构组合成一次Trace追踪记录。Span是有父子关系的
2.1什么时候生成?
服务接受到 Request时,若当前Request没有关联任何Span,便生成一个Span,包括:Span ID、TraceID
向下游服务发送Request时,需生成一个Span,并把新生成的Span的父节点设置成上一步生成的Span
3. Annotation :表示某个时间点发生的Event
3.1cs:Client Send 请求
sr:Server Receive到请求
ss:Server 处理完成、并Send Response
cr:Client Receive 到响应
3.2什么时候生成?
客户端发送Request、接受到Response、服务器端接受到Request、发送 Response时生成。Annotation属于某个Span,需把新生成的Annotation添加到当前上下文里Span的annotations数组里
4. BinaryAnnotation 存放用户自定义信息,比如:sessionID、userID、userIP、异常等
4.1在任意需要记录自定义跟踪信息时都可生成。比如:异常、SessionID等。如Annotation一样,BinaryAnnotation也属于某个Span。需把新生成的BinaryAnnotation,添加到当前上下文里Span的binary_annotations数组.
4.2如果需要添加相应的信息,可以使用tracer埋点技术来实现,在相应需要显示到binaryAnnotation的代码地方加上埋点,之后会自动像zipkin提交信息,用以显示用户需要的自定义信息
附:ZIP原理图
项目具体方案:
一 最终效果: