go-kit 微服务 服务链路追踪(jaeger 实现)(2)

endpoint层

  • 中间件
  1. func NewTracerEndpointMiddleware(tracer opentracing.Tracer) endpoint.Middleware {
  2. return func(next endpoint.Endpoint) endpoint.Endpoint {
  3. return func(ctx context.Context, request interface{}) (response interface{}, err error) {
  4. span, ctxContext := opentracing.StartSpanFromContextWithTracer(ctx, tracer, "endpoint", opentracing.Tag{
  5. Key: string(ext.Component),
  6. Value: "NewTracerEndpointMiddleware",
  7. })
  8. defer span.Finish()
  9. return next(ctxContext, request)
  10. }
  11. }
  12. }
  • 添加到登录EndPoint中
  1. func NewEndPointServer(svc Service, limit *rate.Limiter,tracer opentracing.Tracer) EndPointServer {
  2. var loginEndPoint endpoint.Endpoint
  3. {
  4. loginEndPoint = MakeLoginEndPoint(svc)
  5. loginEndPoint = NewGolangRateAllowMiddleware(limit)(loginEndPoint)
  6. loginEndPoint = NewTracerEndpointMiddleware(tracer)(loginEndPoint)
  7. }
  8. return EndPointServer{LoginEndPoint: loginEndPoint}
  9. }

service层修改

  • 中间件
  1. type tracerMiddlewareServer struct {
  2. next Service
  3. tracer opentracing.Tracer
  4. }
  5. func NewTracerMiddlewareServer(tracer opentracing.Tracer) NewMiddlewareServer {
  6. return func(service Service) Service {
  7. return tracerMiddlewareServer{
  8. next: service,
  9. tracer: tracer,
  10. }
  11. }
  12. }
  13. func (l tracerMiddlewareServer) Login(ctx context.Context, in *pb.Login) (out *pb.LoginAck, err error) {
  14. span, ctxContext := opentracing.StartSpanFromContextWithTracer(ctx, l.tracer, "service", opentracing.Tag{
  15. Key: string(ext.Component),
  16. Value: "NewTracerServerMiddleware",
  17. })
  18. defer func() {
  19. span.Finish()
  20. }()
  21. out, err = l.next.Login(ctxContext, in)
  22. return
  23. }
  • 添加到server方法中
  1. func NewService(log *zap.Logger, counter metrics.Counter, histogram metrics.Histogram, tracer opentracing.Tracer) Service {
  2. var server Service
  3. server = &baseServer{log}
  4. server = NewTracerMiddlewareServer(tracer)(server)
  5. server = NewMetricsMiddlewareServer(counter, histogram)(server)
  6. server = NewLogMiddlewareServer(log)(server)
  7. return server
  8. }

运行

  • 运行 TestNewUserAgentClient 方法
  • 我们登录 http://127.0.0.1:16686/ jaeger后台查询信息

结语

  • 通过后台界面我们可以看到请求信息里面添加上了我们对service,endpoint层的链路追踪
  • jaeger的用法还有很多,这里只展示简单的使用,更加高级的功能欢迎大家一起讨论
  • 欢迎添加QQ一起讨论

完整代码地址

联系 QQ: 3355168235