代码分享 golang 接入链路追踪(opentracing)

huwlsc · 2021年09月16日 · 445 次阅读
本帖已被设为精华帖!

前言

本文主要讲述 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
}

是不是非常简单!!!

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
astaxie 将本帖设为了精华贴 09月17日 03:22
Orichalcum GoCN 每日新闻 (2021-09-17) 中提及了此贴 09月18日 07:48
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册