go 鏈路追蹤 go micro 鏈路追蹤

2021-10-13 01:19:03 字數 4470 閱讀 4666

本片介紹go micro中使用jaeger作為鏈路追蹤的使用

jaeger相關知識請見官方文件,這裡使用docker啟動gaeger,作為測試使用

啟動jaeger

docker run -d -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one:latest

go micro版本2.x,和1.x有些許不同

樣例**使用examples/greeter中**修改

// newtracer 建立乙個jaeger tracer

func newtracer(servicename string, addr string) (opentracing.tracer, io.closer, error) {

cfg := jaegercfg.configuration{

servicename: servicename,

sampler: &jaegercfg.samplerconfig{

type: jaeger.samplertypeconst,

param: 1,

reporter: &jaegercfg.reporterconfig{

logspans: true,

bufferflushinterval: 1 * time.second,

sender, err := jaeger.newudptransport(addr, 0)

if err != nil {

return nil, nil, err

reporter := jaeger.newremotereporter(sender)

// initialize tracer with a logger and a metrics factory

tracer, closer, err := cfg.newtracer(

jaegercfg.reporter(reporter),

return tracer, closer, err

這裡封裝了`newtracer()`建立乙個jaeger tracer

在main()中opentracing.setglobaltracer(t)設定給opentracing

wrapcall() call中介軟體

wrapclient() client中介軟體

wrapsubscriber() 訂閱中介軟體

server端我們使用micro.wraphandler()

通過micro plugins自帶的opentracing外掛程式設定下

// newtracer 建立乙個jaeger tracer

func newtracer(servicename string, addr string) (opentracing.tracer, io.closer, error) {

cfg := jaegercfg.configuration{

servicename: servicename,

sampler: &jaegercfg.samplerconfig{

type: jaeger.samplertypeconst,

param: 1,

reporter: &jaegercfg.reporterconfig{

logspans: true,

bufferflushinterval: 1 * time.second,

sender, err := jaeger.newudptransport(addr, 0)

if err != nil {

return nil, nil, err

reporter := jaeger.newremotereporter(sender)

// initialize tracer with a logger and a metrics factory

tracer, closer, err := cfg.newtracer(

jaegercfg.reporter(reporter),

return tracer, closer, err

client端增加的**和server基本一致,

只是micro.newservice()中使用的是中介軟體是micro.wrapclient(),

執行起來go run srv/main.go

go run cli/main.go

總結:go micro 在整個請求週期中都會帶著ctx,放入header中,詳情請見【micro server分析】,鏈路追蹤的原理就是在header中拿到追蹤資訊,存入分析工具並解析,再展現到頁面。

鏈路追蹤不僅可以用於追蹤整個請求週期,還可自定義追蹤某幾行**,具體請見官方文件

鏈路追蹤 一文讀懂鏈路追蹤

原文 在微服務橫行的時代,服務化思維逐漸成為了程式設計師的基本思維模式,但是,由於絕大部分專案只是一味地增加服務,並沒有對其妥善管理,當介面出現問題時,很難從錯綜複雜的服務呼叫網路中找到問題根源,從而錯失了止損的 時機。而鏈路追蹤的出現正是為了解決這種問題,它可以在複雜的服務呼叫中定位問題,還可以在...

鏈路追蹤 鏈路追蹤技術的應用及實踐

分布式架構的興起推動了一些新技術的發展。其中鏈路追蹤技術以其在apm領域的優異表現,成為了分布式架構中不可或缺的一部分。在本文中,我們將談談它的一些經典應用場景,以及筆者所在的團隊如何利用鏈路追蹤技術提公升團隊的研發效能。如圖所示,在微服務體系中,乙個請求往往需要多個服務協作處理。凡事有利必有弊,這...

swoft 日誌鏈路追蹤

該庫主要通過設定traceid,spanid,來實現日誌鏈路記錄,保證同一請求的鏈路traceid一致 並且增加redishandler可以將日誌直接記錄到redis中 協程方式 後續可以通過elk同步日誌 另外通過日誌配置增加version inte ce method params cost 時...