帶你十天輕鬆搞定 Go 微服務系列(九、鏈路追蹤)
序言
我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
-
環境搭建:帶你十天輕鬆搞定 Go 微服務系列(一)
-
服務拆分:帶你十天輕鬆搞定 Go 微服務系列(二)
-
用戶服務:帶你十天輕鬆搞定 Go 微服務系列(三)
-
產品服務:帶你十天輕鬆搞定 Go 微服務系列(四)
-
訂單服務:帶你十天輕鬆搞定 Go 微服務系列(五)
-
支付服務:帶你十天輕鬆搞定 Go 微服務系列(六)
-
RPC 服務 Auth 驗證:帶你十天輕鬆搞定 Go 微服務系列(七)
-
鏈路追蹤(本文)
-
分佈式事務
期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。
完整示例代碼:https://github.com/nivin-studio/go-zero-mall
首先,我們來看一下整體的服務拆分圖:
9.1 Jaeger 介紹
Jaeger 是 Uber 開發並開源的一款分佈式追蹤系統,兼容 OpenTracing API,適用於以下場景:
-
分佈式跟蹤信息傳遞
-
分佈式事務監控
-
問題分析
-
服務依賴性分析
-
性能優化
Jaeger 的全鏈路追蹤功能主要由三個角色完成:
-
client:負責全鏈路上各個調用點的計時、採樣,並將tracing數據發往本地agent。 -
agent:負責收集client發來的tracing數據,並以thrift協議轉發給collector。 -
collector:負責蒐集所有agent上報的tracing數據,統一存儲。
9.2 go-zero 使用 Jaeger 鏈路追蹤
go-zero 框架已經幫我們實現了鏈路追蹤(詳見:go-zero 鏈路追蹤),並且集成支持了 Jaeger, Zipkin 這兩種鏈路追蹤上報工具,我們只要簡單配置下,就可以可視化的查看到一個請求的完整的調用鏈,以及每一個環節的調用情況及性能。
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/userinfoapi接口
- 在 第一章 環境搭建 中我們集成了
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-zero 並 star 支持我們!
微信交流羣
關注『微服務實踐』公衆號並點擊 交流羣 獲取社區羣二維碼。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/gpF-2NQ6Umxn-VqkzRPQpw