前言
本文主要讲述golang如何接入开放式链路追踪(opentracing)。
OpenTracing-Go-Plugins介绍
opentracing-go-plugins是一个opentracing-go插件库。
该插件库支持net/http、grpc、gin、goredis、gorm等。
如何接入
引入包
go get -u github.com/yuewokeji/opentracing-go-plugins
初始化tracer
我们以jaeger为例,先创建tracer实例,再调用方法opentracing.GlobalTracer()
设置一个全局的tracer
package main
import (
"github.com/opentracing/opentracing-go"
"github.com/uber/jaeger-client-go"
"github.com/uber/jaeger-client-go/transport"
"io"
)
func initJaeger(service, url string) (opentracing.Tracer, io.Closer) {
sender := transport.NewHTTPTransport(url)
reporter := jaeger.NewRemoteReporter(sender, jaeger.ReporterOptions.Logger(jaeger.StdLogger))
// samples 100% of traces
tracer, closer := jaeger.NewTracer(service, jaeger.NewConstSampler(true), reporter)
return tracer, closer
}
func initGlobalTracer() io.Closer {
// the closer can be used in shutdown hooks
tracer, closer := initJaeger("hello-world", "https://your-reporter-url")
opentracing.SetGlobalTracer(tracer)
return closer
}
gin接入
package main
import (
"github.com/gin-gonic/gin"
"github.com/yuewokeji/opentracing-go-plugins/module/otgin"
)
func main() {
server := gin.New()
server.Use(otgin.NewMiddleware(server))
//do something
}
net/http客户端接入
package main
import (
"github.com/yuewokeji/opentracing-go-plugins/module/othttp"
"net/http"
"strings"
)
func main() {
client := othttp.WrapClient(&http.Client{})
req, err := http.NewRequest("GET", "https://github.com", strings.NewReader(""))
if err != nil {
panic(err)
}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
// do something
}
是不是非常简单!!!