(16)go-micro微服務jaeger鏈路追蹤

qi66發表於2023-01-20

一 jaeger鏈路追蹤介紹

什麼是鏈路追蹤:

  • 分散式鏈路追蹤就是將一次分散式請求還原成呼叫鏈路,將一次分散式請求的呼叫情況集中展示,比如各個服務節點上的耗時、請求具體到達哪臺機器上、每個服務節點的請求狀態等等

鏈路追蹤主要功能:

  • 故障快速定位:可以透過呼叫鏈結合業務日誌快速定位錯誤資訊

  • 鏈路效能視覺化:各個階段鏈路耗時、服務依賴關係可以透過視覺化介面展現出來

  • 鏈路分析:透過分析鏈路耗時、服務依賴關係可以得到使用者的行為路徑,彙總分析應用在很多業務場景

二 jaeger鏈路追蹤作用

  • 它是用來監視和診斷基於微服務的分散式系統

  • 用於服務依賴性分析,輔助效能最佳化

三 jaeger鏈路追蹤主要特性

  • 高擴充套件性

  • 原生支援OpenTracing

  • 可觀察性

四 jaeger鏈路追蹤原理圖

1.鏈路呼叫原理

  • 服務間經過的區域性鏈路構成了一條完整的鏈路,其中每一條區域性鏈路都用一個全域性唯一的traceid來標識。
    image.png

image.png

2. 一次呼叫鏈分析

image.png

3.鏈路追蹤儲存與呼叫

image.png

五 jaeger鏈路追蹤五個重要元件

  • Jaeger-client ( 客戶端庫)

  • Agent ( 客戶端代理)

  • Collector ( 資料收集處理)

  • Data Store ( 資料儲存)

  • UI (資料查詢與前端介面展示)

六 jaeger鏈路追蹤安裝

1.docker拉取jaeger映象

docker pull jaegertracing/all-in-one

2.docker執行jaeger

docker run -d --name jaeger -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one
  • 使用 docker ps 檢視是否jaeger執行

3.安裝jaeger庫

go get github.com/opentracing/opentracing-go
go get github.com/uber/jaeger-client-go
go get github.com/micro/go-plugins/wrapper/trace/opentracing/v2

七 jaeger鏈路追蹤程式碼編寫

  • 在micro目錄下新建jaeger.go檔案,輸入以下程式碼:
package micro

import (
   "github.com/opentracing/opentracing-go"
   "github.com/uber/jaeger-client-go"
   "github.com/uber/jaeger-client-go/config"
   "io"
   "time"
)

// NewTracer 建立鏈路追蹤
func NewTracer(serviceName string,addr string)(opentracing.Tracer,io.Closer,error){
   cfg := &config.Configuration{
      ServiceName: serviceName,
      Sampler: &config.SamplerConfig{
         Type:                     jaeger.SamplerTypeConst,
         Param:                    1,
      },
      Reporter: &config.ReporterConfig{
         BufferFlushInterval:        1 * time.Second,
         LogSpans:                   true,
         LocalAgentHostPort:         addr,
      },
   }
   return cfg.NewTracer()
}
  • 在main.go編寫程式碼:
// 5.jaeger 鏈路追蹤
t, io, err := micro.NewTracer(micro.ConsulInfo.Jaeger.ServiceName, micro.ConsulInfo.Jaeger.Addr)
if err != nil {
   logger.Error(err)
   return
}
defer io.Close()
opentracing.SetGlobalTracer(t)
  • 在註冊服務的程式碼中新增:
//新增鏈路追蹤
micro.WrapHandler(opentracing2.NewHandlerWrapper(opentracing.GlobalTracer())),

image.png

八 jaeger鏈路追蹤圖形視覺化介面

image.png

  • 在Service中輸入jaeger-query,點選Find Traces。

image.png

  • 至此jaeger使用完成

九 最後

  • 至此,go-micro微服務jaeger鏈路追蹤開發工作就正式完成。

  • 接下來就開始Prometheus監控的程式碼編寫了,希望大家關注博主和關注專欄,第一時間獲取最新內容,每篇部落格都乾貨滿滿。

歡迎大家加入 夏沫の夢的學習交流群 進行學習交流經驗,點選 夏沫の夢學習交流

相關文章