帶你十天輕鬆搞定 Go 微服務系列(九、鏈路追蹤)

語言: CN / TW / HK

序言

我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:

  1. 環境搭建: 帶你十天輕鬆搞定 Go 微服務系列(一)

  2. 服務拆分: 帶你十天輕鬆搞定 Go 微服務系列(二)

  3. 使用者服務: 帶你十天輕鬆搞定 Go 微服務系列(三)

  4. 產品服務: 帶你十天輕鬆搞定 Go 微服務系列(四)

  5. 訂單服務: 帶你十天輕鬆搞定 Go 微服務系列(五)

  6. 支付服務: 帶你十天輕鬆搞定 Go 微服務系列(六)

  7. RPC 服務 Auth 驗證: 帶你十天輕鬆搞定 Go 微服務系列(七)

  8. 服務監控: 帶你十天輕鬆搞定 Go 微服務系列(八、服務監控)

  9. 鏈路追蹤 (本文)

  10. 分散式事務

期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。

完整示例程式碼:https://github.com/nivin-studio/go-zero-mall

首先,我們來看一下整體的服務拆分圖:

9.1 Jaeger 介紹

JaegerUber 開發並開源的一款分散式追蹤系統,相容 OpenTracing API ,適用於以下場景:

  • 分散式跟蹤資訊傳遞

  • 分散式事務監控

  • 問題分析

  • 服務依賴性分析

  • 效能優化

Jaeger 的全鏈路追蹤功能主要由三個角色完成:

  • client
    tracing
    agent
    
  • agent
    client
    tracing
    thrift
    collector
    
  • collector
    agent
    tracing
    

9.2  go-zero 使用  Jaeger 鏈路追蹤

go-zero 框架已經幫我們實現了鏈路追蹤(詳見:go-zero鏈路追蹤),並且整合支援了 JaegerZipkin 這兩種鏈路追蹤上報工具,我們只要簡單配置下,就可以視覺化的檢視到一個請求的完整的呼叫鏈,以及每一個環節的呼叫情況及效能。

9.2.1 新增 user api 服務 Telemetry 配置

$ vim mall/service/user/api/etc/user.yaml
Name: User
Host: 0.0.0.0
Port: 8000

...

Telemetry:
  Name: user.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

9.2.2 新增 user rpc 服務 Telemetry 配置

$ vim mall/service/user/rpc/etc/user.yaml
Name: user.rpc
ListenOn: 0.0.0.0:9000

...

Telemetry:
  Name: user.rpc
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

9.2.3 新增 product api 服務 Telemetry 配置

$ vim mall/service/product/api/etc/product.yaml
Name: Product
Host: 0.0.0.0
Port: 8001

...

Telemetry:
  Name: product.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

9.2.4 新增 product rpc 服務 Telemetry 配置

$ vim mall/service/product/rpc/etc/product.yaml
Name: product.rpc
ListenOn: 0.0.0.0:9001

...

Telemetry:
  Name: product.rpc
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

9.2.5 新增 order api 服務 Telemetry 配置

$ vim mall/service/order/api/etc/order.yaml
Name: Order
Host: 0.0.0.0
Port: 8002

...

Telemetry:
  Name: order.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

9.2.6 新增 order rpc 服務 Telemetry 配置

$ vim mall/service/order/rpc/etc/order.yaml
Name: order.rpc
ListenOn: 0.0.0.0:9002

...

Telemetry:
  Name: order.rpc
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

9.2.7 新增 pay api 服務 Telemetry 配置

$ vim mall/service/pay/api/etc/pay.yaml
Name: Pay
Host: 0.0.0.0
Port: 8003

...

Telemetry:
  Name: pay.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

9.2.8 新增 pay rpc 服務 Telemetry 配置

$ vim mall/service/pay/rpc/etc/pay.yaml
Name: pay.rpc
ListenOn: 0.0.0.0:9003

...

Telemetry:
  Name: pay.rpc
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

提示:配置修改後,需要重啟服務才會生效。

9.3 使用  Jaeger UI 檢視鏈路

  • 訪問 /api/user/userinfo api介面
  • 第一章 環境搭建 中我們集成了  Jaeger 服務,併為其 Jaeger UI 埠號 16686 做了宿主機埠 5000 的對映關係,所以在瀏覽器中輸入  http://127.0.0.1:5000/ 訪問  Jaeger UI 介面。選擇 Search 選單,在 Service 下拉框中選擇 user.api ,最後點選 Find Traces 按鈕,可以查詢到剛剛訪問的 /api/user/userinfo 介面的鏈路追蹤資料。
  • 點選進去,就可以看到這個 /api/user/userinfo 介面的鏈路時序圖,以及服務依賴關係,和耗時情況。
  • 右上角的下拉選單可以選擇不同的資料展示樣式。

  • 其他介面鏈路追蹤效果圖

專案地址

https://github.com/zeromicro/go-zero

歡迎使用 go-zerostar 支援我們!

微信交流群

關注『 微服務實踐 』公眾號並點選 交流群 獲取社群群二維碼。