簡介: 本文將介紹如何在 gRPC 分布式場景中,實現 API 的日志跟蹤。
介紹
本文將介紹如何在 gRPC 分布式場景中,實現 API 的日志追蹤。
什么是 API 日志追蹤?一個 API 請求會跨多個微服務,我們希望通過一個唯一的 ID 檢索到整個鏈路的日志。
請訪問如下地址獲取完整教程:
安裝
快速開始
我們會創建 /api/v1/greeter API 進行驗證,同時開啟 logging, meta 和 tracing 攔截器以達到目的。
1. 創建 api/v1/greeter.proto
2. 創建 api/v1/gw_mapping.yaml
3. 創建 buf.yaml
4. 創建 buf.gen.yaml
5. 編譯 proto file
如下的文件會被創建。
6. 創建 bootA.yaml & serverA.go
Server-A 監聽 1949 端口,並且發送請求給 Server-B。
我們通過 rkgrpcctx.InjectSpanToNewContext() 方法把 Tracing 信息注入到 Context 中,發送給 Server-B。
7. 創建 bootB.yaml & serverB.go
Server-B 監聽 2008 端口。
8. 文件夾結構
9. 啟動 ServerA & ServerB
10. 往 ServerA 發送請求
11. 驗證日志
兩個服務的日志中,會有同樣的 traceId,不同的 requestId。
我們可以通過 grep traceId 來追蹤 RPC。
- ServerA
- ServerB
概念
當我們沒有使用例如 jaeger 調用鏈服務的時候,我們希望通過日志來追蹤分布式系統里的 RPC 請求。
rk-boot 的攔截器會通過 openTelemetry 庫來向日志寫入 traceId 來追蹤 RPC。
當啟動了日志攔截器,原數據攔截器,調用鏈攔截器的時候,攔截器會往日志里寫入如下三種 ID。
EventId
當啟動了日志攔截器,EventId 會自動生成。
RequestId
當啟動了日志攔截器和原數據攔截器,RequestId 和 EventId 會自動生成,並且這兩個 ID 會一致。
即使用戶覆蓋了 RequestId,EventId 也會保持一致。
TraceId
當啟動了調用鏈攔截器,traceId 會自動生成。
原文鏈接
本文為阿里雲原創內容,未經允許不得轉載。