diff --git a/app/controller/jaeger_conn/jaeger_conn.go b/app/controller/jaeger_conn/jaeger_conn.go index b5d4b05a..5dea1590 100644 --- a/app/controller/jaeger_conn/jaeger_conn.go +++ b/app/controller/jaeger_conn/jaeger_conn.go @@ -14,30 +14,30 @@ import ( func JaegerTest(c *gin.Context) { // 调用 gRPC 服务 - conn := grpc_client.CreateServiceListenConn() + conn := grpc_client.CreateServiceListenConn(c) grpcListenClient := listen.NewListenClient(conn) resListen, _ := grpcListenClient.ListenData(context.Background(), &listen.Request{Name: "listen"}) // 调用 gRPC 服务 - conn = grpc_client.CreateServiceSpeakConn() + conn = grpc_client.CreateServiceSpeakConn(c) grpcSpeakClient := speak.NewSpeakClient(conn) resSpeak, _ := grpcSpeakClient.SpeakData(context.Background(), &speak.Request{Name: "speak"}) // 调用 gRPC 服务 - conn = grpc_client.CreateServiceReadConn() + conn = grpc_client.CreateServiceReadConn(c) grpcReadClient := read.NewReadClient(conn) resRead, _ := grpcReadClient.ReadData(context.Background(), &read.Request{Name: "read"}) // 调用 gRPC 服务 - conn = grpc_client.CreateServiceWriteConn() + conn = grpc_client.CreateServiceWriteConn(c) grpcWriteClient := write.NewWriteClient(conn) resWrite, _ := grpcWriteClient.WriteData(context.Background(), &write.Request{Name: "write"}) defer conn.Close() - + // 调用 HTTP 服务 resHttpGet := "" - _, err := util.HttpGet("http://localhost:9905/sing") + _, err := util.HttpGet("http://localhost:9905/sing", c) if err == nil { resHttpGet = "[HttpGetOk]" } diff --git a/app/route/middleware/jaeger/jaeger.go b/app/route/middleware/jaeger/jaeger.go index ce54fed4..1f2480e8 100644 --- a/app/route/middleware/jaeger/jaeger.go +++ b/app/route/middleware/jaeger/jaeger.go @@ -6,35 +6,33 @@ import ( "github.com/opentracing/opentracing-go/ext" "go-gin-api/app/config" "go-gin-api/app/util/jaeger_trace" - "io" ) -var Tracer opentracing.Tracer -var Closer io.Closer -var Error error - -var ParentSpan opentracing.Span - func SetUp() gin.HandlerFunc { return func(c *gin.Context) { if config.JaegerOpen == 1 { - Tracer, Closer, Error = jaeger_trace.NewJaegerTracer(config.AppName, config.JaegerHostPort) - defer Closer.Close() + + var parentSpan opentracing.Span + + tracer, closer := jaeger_trace.NewJaegerTracer(config.AppName, config.JaegerHostPort) + defer closer.Close() spCtx, err := opentracing.GlobalTracer().Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(c.Request.Header)) if err != nil { - ParentSpan = Tracer.StartSpan(c.Request.URL.Path) - defer ParentSpan.Finish() + parentSpan = tracer.StartSpan(c.Request.URL.Path) + defer parentSpan.Finish() } else { - ParentSpan = opentracing.StartSpan( + parentSpan = opentracing.StartSpan( c.Request.URL.Path, opentracing.ChildOf(spCtx), opentracing.Tag{Key: string(ext.Component), Value: "HTTP"}, ext.SpanKindRPCServer, ) - defer ParentSpan.Finish() + defer parentSpan.Finish() } + c.Set("Tracer", tracer) + c.Set("ParentSpanContext", parentSpan.Context()) } c.Next() } diff --git a/app/util/grpc_client/grpc_client.go b/app/util/grpc_client/grpc_client.go index f44bdb2f..679e5f7b 100644 --- a/app/util/grpc_client/grpc_client.go +++ b/app/util/grpc_client/grpc_client.go @@ -3,32 +3,33 @@ package grpc_client import ( "context" "fmt" + "github.com/gin-gonic/gin" grpc_middeware "github.com/grpc-ecosystem/go-grpc-middleware" + "github.com/opentracing/opentracing-go" "go-gin-api/app/config" - "go-gin-api/app/route/middleware/jaeger" "go-gin-api/app/util/grpc_log" "go-gin-api/app/util/jaeger_trace" "google.golang.org/grpc" "time" ) -func CreateServiceListenConn() *grpc.ClientConn { - return createGrpcConn("127.0.0.1:9901") +func CreateServiceListenConn(c *gin.Context) *grpc.ClientConn { + return createGrpcConn("127.0.0.1:9901", c) } -func CreateServiceSpeakConn() *grpc.ClientConn { - return createGrpcConn("127.0.0.1:9902") +func CreateServiceSpeakConn(c *gin.Context) *grpc.ClientConn { + return createGrpcConn("127.0.0.1:9902", c) } -func CreateServiceReadConn() *grpc.ClientConn { - return createGrpcConn("127.0.0.1:9903") +func CreateServiceReadConn(c *gin.Context) *grpc.ClientConn { + return createGrpcConn("127.0.0.1:9903", c) } -func CreateServiceWriteConn() *grpc.ClientConn { - return createGrpcConn("127.0.0.1:9904") +func CreateServiceWriteConn(c *gin.Context) *grpc.ClientConn { + return createGrpcConn("127.0.0.1:9904", c) } -func createGrpcConn(serviceAddress string) *grpc.ClientConn { +func createGrpcConn(serviceAddress string, c *gin.Context) *grpc.ClientConn { var conn *grpc.ClientConn var err error @@ -37,6 +38,10 @@ func createGrpcConn(serviceAddress string) *grpc.ClientConn { defer cancel() if config.JaegerOpen == 1 { + + tracer, _ := c.Get("Tracer") + parentSpanContext, _ := c.Get("ParentSpanContext") + conn, err = grpc.DialContext( ctx, serviceAddress, @@ -44,7 +49,7 @@ func createGrpcConn(serviceAddress string) *grpc.ClientConn { grpc.WithBlock(), grpc.WithUnaryInterceptor( grpc_middeware.ChainUnaryClient( - jaeger_trace.ClientInterceptor(jaeger.Tracer, jaeger.ParentSpan.Context()), + jaeger_trace.ClientInterceptor(tracer.(opentracing.Tracer), parentSpanContext.(opentracing.SpanContext)), grpc_log.ClientInterceptor(), ), ), diff --git a/app/util/jaeger_trace/jaeger_trace.go b/app/util/jaeger_trace/jaeger_trace.go index 8ac89c7a..84f87a82 100644 --- a/app/util/jaeger_trace/jaeger_trace.go +++ b/app/util/jaeger_trace/jaeger_trace.go @@ -14,7 +14,7 @@ import ( "strings" ) -func NewJaegerTracer(serviceName string, jaegerHostPort string) (opentracing.Tracer, io.Closer, error) { +func NewJaegerTracer(serviceName string, jaegerHostPort string) (opentracing.Tracer, io.Closer) { cfg := &jaegerConfig.Configuration { Sampler: &jaegerConfig.SamplerConfig{ @@ -35,7 +35,7 @@ func NewJaegerTracer(serviceName string, jaegerHostPort string) (opentracing.Tra panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err)) } opentracing.SetGlobalTracer(tracer) - return tracer, closer, err + return tracer, closer } type MDReaderWriter struct { diff --git a/app/util/request.go b/app/util/request.go index 0e1afaae..0c19a608 100644 --- a/app/util/request.go +++ b/app/util/request.go @@ -2,17 +2,17 @@ package util import ( "crypto/tls" + "github.com/gin-gonic/gin" "github.com/opentracing/opentracing-go" "github.com/opentracing/opentracing-go/ext" "go-gin-api/app/config" - "go-gin-api/app/route/middleware/jaeger" "io/ioutil" "log" "net/http" "time" ) -func HttpGet(url string) (string, error) { +func HttpGet(url string, c *gin.Context) (string, error) { tr := &http.Transport{ TLSClientConfig : &tls.Config{InsecureSkipVerify: true}, @@ -29,16 +29,20 @@ func HttpGet(url string) (string, error) { } if config.JaegerOpen == 1 { + + tracer, _ := c.Get("Tracer") + parentSpanContext, _ := c.Get("ParentSpanContext") + span := opentracing.StartSpan( "call Http Get", - opentracing.ChildOf(jaeger.ParentSpan.Context()), + opentracing.ChildOf(parentSpanContext.(opentracing.SpanContext)), opentracing.Tag{Key: string(ext.Component), Value: "HTTP"}, ext.SpanKindRPCClient, ) span.Finish() - injectErr := jaeger.Tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) + injectErr := tracer.(opentracing.Tracer).Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) if injectErr != nil { log.Fatalf("%s: Couldn't inject headers", err) }