Skip to content

Commit

Permalink
Update 优化链路追踪
Browse files Browse the repository at this point in the history
  • Loading branch information
xinliangnote committed Sep 30, 2019
1 parent 5ca6cf2 commit 25e75a8
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 36 deletions.
12 changes: 6 additions & 6 deletions app/controller/jaeger_conn/jaeger_conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -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]"
}
Expand Down
24 changes: 11 additions & 13 deletions app/route/middleware/jaeger/jaeger.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Expand Down
27 changes: 16 additions & 11 deletions app/util/grpc_client/grpc_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -37,14 +38,18 @@ 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,
grpc.WithInsecure(),
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(),
),
),
Expand Down
4 changes: 2 additions & 2 deletions app/util/jaeger_trace/jaeger_trace.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand All @@ -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 {
Expand Down
12 changes: 8 additions & 4 deletions app/util/request.go
Original file line number Diff line number Diff line change
Expand Up @@ -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},
Expand All @@ -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)
}
Expand Down

0 comments on commit 25e75a8

Please sign in to comment.