* @modifytime:
*/
@Activate(group = {Constants.PROVIDER, Constants.CONSUMER})
public class TracingFilter implements Filter {
private static final Logger log = LoggerFactory.getLogger(TracingFilter.class);
private static Tracing tracing;
private static Tracer tracer;
private static TraceContext.Extractor- 構建客戶端發送工具
- 構建異步reporter
- 構建tracing上下文
- 初始化injector 和 Extractor [tab]4.1 extractor 指數據提取對象,用於在carrier中提取TraceContext相關信息或者採樣標記信息到TraceContextOrSamplingFlags 中 -4.2 injector 用於將TraceContext中的各種數據注入到carrier中,其中carrier一半是指數據傳輸中的載體,類似於Dubbo中Invocation中的attachment(附件集合)
- 判斷此次調用是作為服務端還是客戶端
- rpc客戶端調用會從ThreadLocal中獲取parent的 TraceContext ,為新生成的Span指定traceId及 parentId如果沒有parent traceContext 則生成的Span為 root span
- 將Span綁定的TraceContext中 屬性信息 Copy 到 Invocation中達到遠程參數傳遞的作用
- rpc服務提供端 , 從invocation中提取TraceContext相關信息及採樣數據信息
- 生成span , 兼容初次服務端調用
- 記錄接口信息及遠程IP Port
- 將創建的Span 作為當前Span (可以通過Tracer.currentSpan 訪問到它) 並設置查詢範圍
- oneway調用即只請求不接受結果
- 如果future不為空則為 async 調用 在回調中finish span
- 設置異步回調,回調代碼執行span finish() .
- oneway調用 因為不需等待返回值 即沒有 cr (Client Receive) 需手動flush()
- 同步調用 業務代碼執行完畢後需手動finish()
- 設置枚舉類 與 Dubbo中RpcException保持對應
測試項
- Dubbo sync async oneway 測試
- RPC異常測試
- 普通業務異常測試
- 併發測試
配置方式
POM依賴添加
com.github.baker
Tracing
1.0-SNAPSHOT
資源目錄根路徑下添加tracing.properties文件
一次調用信息
調用鏈
調用成功失敗彙總
zipkinHost 指定zipkin服務器IP:PORT 默認為localhost:9411 serviceName 指定應用名稱 默認為trace-default
調用鏈:
待擴展項
- 抽象數據傳輸(擴展Kafka數據傳輸)
- 調用返回值數據打印
- 更靈活的配置方式
閱讀更多 IT技術之家
的文章
關鍵字:
追蹤
Apache
新浪