57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package trace
|
|
|
|
import (
|
|
"github.com/openzipkin/zipkin-go"
|
|
zkHttp "github.com/openzipkin/zipkin-go/reporter/http"
|
|
"log"
|
|
"qteam/config"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
tracer *zipkin.Tracer
|
|
lock sync.Mutex
|
|
)
|
|
|
|
func Tracer() (*zipkin.Tracer, error) {
|
|
if tracer == nil {
|
|
// 有err, 不适合用sync.Once做单例
|
|
lock.Lock()
|
|
defer lock.Unlock()
|
|
if tracer == nil {
|
|
err := InitTracer(config.GetConf().ServiceName, config.GetConf().SkyWalkingOapServer)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
}
|
|
return tracer, nil
|
|
}
|
|
|
|
func InitTracer(serviceName, skyWalkingOapServer string) error {
|
|
zipkinReporter := zkHttp.NewReporter(skyWalkingOapServer)
|
|
|
|
// create our local service endpoint
|
|
endpoint, err := zipkin.NewEndpoint(serviceName, "192.168.110.65:8081")
|
|
if err != nil {
|
|
log.Fatalf("unable to create local endpoint: %+v\n", err)
|
|
}
|
|
sampler := zipkin.NewModuloSampler(1)
|
|
// Initialize the tracer.
|
|
nativeTracer, err := zipkin.NewTracer(
|
|
zipkinReporter,
|
|
zipkin.WithLocalEndpoint(endpoint),
|
|
zipkin.WithSampler(sampler),
|
|
)
|
|
// initialize our tracer
|
|
//nativeTracer, err := zipkin.NewTracer(zipkinReporter, zipkin.WithLocalEndpoint(endpoint))
|
|
if err != nil {
|
|
log.Fatalf("unable to create tracer: %+v\n", err)
|
|
}
|
|
|
|
// use zipkin-go-opentracing to wrap our tracer
|
|
tracer = nativeTracer
|
|
|
|
return err
|
|
}
|