美文网首页
go-kit 微服务 服务链路追踪(jaeger 实现)(2)

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

作者: hwholiday | 来源:发表于2020-01-13 13:55 被阅读0次

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

endpoint层

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

    }
    return EndPointServer{LoginEndPoint: loginEndPoint}
}

service层修改

  • 中间件
type tracerMiddlewareServer struct {
    next   Service
    tracer opentracing.Tracer
}
func NewTracerMiddlewareServer(tracer opentracing.Tracer) NewMiddlewareServer {
    return func(service Service) Service {
        return tracerMiddlewareServer{
            next:   service,
            tracer: tracer,
        }
    }
}
func (l tracerMiddlewareServer) Login(ctx context.Context, in *pb.Login) (out *pb.LoginAck, err error) {
    span, ctxContext := opentracing.StartSpanFromContextWithTracer(ctx, l.tracer, "service", opentracing.Tag{
        Key:   string(ext.Component),
        Value: "NewTracerServerMiddleware",
    })
    defer func() {
        span.Finish()
    }()
    out, err = l.next.Login(ctxContext, in)
    return
}
  • 添加到server方法中
func NewService(log *zap.Logger, counter metrics.Counter, histogram metrics.Histogram, tracer opentracing.Tracer) Service {
    var server Service
    server = &baseServer{log}
    server = NewTracerMiddlewareServer(tracer)(server)
    server = NewMetricsMiddlewareServer(counter, histogram)(server)
    server = NewLogMiddlewareServer(log)(server)
    return server
}

运行

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


    image

结语

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

完整代码地址

联系 QQ: 3355168235

相关文章

网友评论

      本文标题:go-kit 微服务 服务链路追踪(jaeger 实现)(2)

      本文链接:https://www.haomeiwen.com/subject/muggactx.html