本片介紹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 時...