golang使用jaeger進(jìn)行鏈路追蹤
前言
提示:請配置好環(huán)境
一、什么是鏈路追蹤?
鏈路追蹤是指在分布式系統(tǒng)中,將一次請求的處理過程進(jìn)行記錄并聚合展示的一種方法。目的是將一次分布式請求的調(diào)用情況集中在一處展示,如各個服務(wù)節(jié)點上的耗時、請求具體到達(dá)哪臺機器上、每個服務(wù)節(jié)點的請求狀態(tài)等。這樣就可以輕松了解一個請求在系統(tǒng)中的完整生命周期,包括經(jīng)過的服務(wù)、調(diào)用的操作以及每個操作的延遲等。通過鏈路追蹤,可以更好地理解系統(tǒng)的性能瓶頸、找出問題的根源以及優(yōu)化系統(tǒng)的性能。
二、安裝jaeger
docker pull jaegertracing/all-in-one:latest docker run -d --name myjaeger -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one:latest
運行:127.0.0.1:16686

三、golang使用jaeger進(jìn)行鏈路追蹤
package main
import (
"time"
opentracing "github.com/opentracing/opentracing-go"
"github.com/uber/jaeger-client-go"
jaegercfg "github.com/uber/jaeger-client-go/config"
jaegerlog "github.com/uber/jaeger-client-go/log"
)
func main() {
cfg := jaegercfg.Configuration{
Sampler: &jaegercfg.SamplerConfig{
Type: jaeger.SamplerTypeConst,
Param: 1,
},
Reporter: &jaegercfg.ReporterConfig{
LogSpans: true,
LocalAgentHostPort: "127.0.0.1:6831",
},
ServiceName: "deardai-shop",
}
tracer, closer, err := cfg.NewTracer(jaegercfg.Logger(jaegerlog.StdLogger))
if err != nil {
panic(err)
}
defer closer.Close()
//單個追蹤
single_span := tracer.StartSpan("single-span")
time.Sleep(time.Second * 3)
single_span.Finish()
//父子追蹤
parentSpan := tracer.StartSpan("main")
span := tracer.StartSpan("func1", opentracing.ChildOf(parentSpan.Context()))
time.Sleep(time.Second)
span.Finish()
span2 := tracer.StartSpan("func2", opentracing.ChildOf(span.Context()))
time.Sleep(time.Second * 3)
span2.Finish()
parentSpan.Finish()
}
結(jié)果:
可以看到下圖展示出了兩個鏈路

2. 單個方法的追蹤

多個方法的組合

總結(jié)
到此這篇關(guān)于golang使用jaeger進(jìn)行鏈路追蹤的文章就介紹到這了,更多相關(guān)golang jaeger鏈路追蹤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang實現(xiàn)redis的延時消息隊列功能示例
這篇文章主要介紹了golang實現(xiàn)redis的延時消息隊列功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
go語言interface接口繼承多態(tài)示例及定義解析
這篇文章主要為大家介紹了go語言interface接口繼承多態(tài)示例及定義解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04

