【原因】
链路追踪用的是Jaeger,但每个请求没法看到具体的请求信息和响应信息,这让排查问题不方便,如图只能看到各个链路调用的信息。

【改造】
基于go-zero,在main.go文件添加一个拦截器(中间件)
s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
	vmallGoods.RegisterVMallGoodsServer(grpcServer, srv)
})
	defer s.Stop()
//加入下面这行
s.AddUnaryInterceptors(InjectSpanInfoInterceptor)
这里定义了一个InjectSpanInfoInterceptor方法,下面就实现这个方法:
func InjectSpanInfoInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
	reqDataStr, _ := json.Marshal(req)
	serverSpan := opentracing.SpanFromContext(ctx)
	defer func () {
		if err := recover(); err != nil {
			serverSpan.SetTag("error", true)
			serverSpan.LogKV("error-msg", err)
		}
	}()
	methodName := info.FullMethod
  //先把span获取出来
	if serverSpan == nil {
		serverSpan = opentracing.StartSpan(methodName)
	} else {
		serverSpan.SetOperationName(methodName)
	}
	defer serverSpan.Finish()
	ctx = opentracing.ContextWithSpan(ctx, serverSpan)
//记录请求数据,LogRequestData是常量,可根据自己喜好定义字符串
	serverSpan.LogKV(LogRequestData, string(reqDataStr))
//执行后续代码
	resp, err = handler(ctx, req)
//记录响应数据,LogResponseData是常量,可根据自己喜好定义字符串
	respStr, _ := json.Marshal(resp)
	serverSpan.LogKV(LogResponseData, string(respStr))
	return resp,err
}
【结果】

如图,这样就出现了request-data和response-data,看到具体的请求和响应信息啦
