该demo模拟了一个gin框架搭建的http服务,其中有使用gorm以及go-redis框架
还模拟了一个grpc框架搭建的c/s服务模式
.
├── README.md
├── cmd
│ ├── grpc
│ │ └── main.go
│ └── http
│ └── main.go
├── go.mod
├── go.sum
├── internal
│ └── http
│ └── handle.go
└── pkg
├── gormclient
│ └── gorm.go
├── redisclient
│ └── redis.go
├── trace
│ └── trace.go
└── grpcdemo
├── cilent.go
├── server.go
├── hello-service.proto
├── hello-service.pb.go
└── hello-service_grpc.pb.go
-
demo入口见cmd下的两个main.go
-
trace相关配置在trace.go文件中
-
gorm以及redis的埋点sdk设置见pkg下对应文件
-
gin的埋点设置见main.go函数中
-
手动埋点的示例见handle.go文件的mockTrace函数
-
grpc框架的客户端和服务端在pkg/grpcdemo/下
Span:一个节点在收到请求以及完成请求的过程是一个 Span
,Span
记录了在这个过程中产生的各种信息。
Trace:一条Trace
(调用链)可以被认为是一个由多个Span
组成的有向无环图(DAG图), Span
与Span
的关系被命名为References
。
Tracer:Tracer
接口用来创建Span
,以及处理如何处理Inject
(serialize) 和 Extract
(deserialize),用于跨进程边界传递。
Context: Context
是一个非常重要的概念,当我们需要跨服务传播trace数据时,可以在Context
中存储spanID,traceID等信息,并随请求传输到另一个服务。