目錄
一 jaeger鏈路追蹤介紹
什麼是鏈路追蹤:
- 分散式鏈路追蹤就是將一次分散式請求還原成呼叫鏈路,將一次分散式請求的呼叫情況集中展示,比如各個服務節點上的耗時、請求具體到達哪臺機器上、每個服務節點的請求狀態等等
鏈路追蹤主要功能:
-
故障快速定位:可以透過呼叫鏈結合業務日誌快速定位錯誤資訊
-
鏈路效能視覺化:各個階段鏈路耗時、服務依賴關係可以透過視覺化介面展現出來
-
鏈路分析:透過分析鏈路耗時、服務依賴關係可以得到使用者的行為路徑,彙總分析應用在很多業務場景
二 jaeger鏈路追蹤作用
-
它是用來監視和診斷基於微服務的分散式系統
-
用於服務依賴性分析,輔助效能最佳化
三 jaeger鏈路追蹤主要特性
-
高擴充套件性
-
原生支援OpenTracing
-
可觀察性
四 jaeger鏈路追蹤原理圖
1.鏈路呼叫原理
- 服務間經過的區域性鏈路構成了一條完整的鏈路,其中每一條區域性鏈路都用一個全域性唯一的traceid來標識。
2. 一次呼叫鏈分析
3.鏈路追蹤儲存與呼叫
五 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())),
八 jaeger鏈路追蹤圖形視覺化介面
- 執行服務後,輸入 http://127.0.0.1:16686/
- 在Service中輸入jaeger-query,點選Find Traces。
- 至此jaeger使用完成
九 最後
-
至此,go-micro微服務jaeger鏈路追蹤開發工作就正式完成。
-
接下來就開始Prometheus監控的程式碼編寫了,希望大家關注博主和關注專欄,第一時間獲取最新內容,每篇部落格都乾貨滿滿。