Pinpoint擴展插件實踐筆記

爲鏈路(spanEvent)添加tag

背景web

咱們可能須要想在代碼中寫入特定的信息到調用鏈中,而且但願對裏面的特定key作檢索緩存

實現思路框架

建立一個特定的類,只須要一個方法,再對這個類的方法進行加強,這個就能夠拿到入參信息,把它加入到調用鏈路,這個思路是對的,也實現了,不過有優化空間,默認的插件攔截器都是會建立一個spanEvent,這樣若是業務中調用了太屢次,鏈路就會很深,實際上這些tag信息是不須要單獨開鏈路的,只須要與當前的鏈路綁定就行了,因此能夠獲取當前的spanEvent,把tag內容添加進去優化

檢索的能力經過在收集器端解析特定的key,再把內容寫到es中,再經過web端進行檢索spa

獲取當前鏈路的traceId

背景插件

爲了和其它的監控結合,好比在dubbo調用鏈中顯示traceId,或者緩存監控框架中記錄traceId,雖然官方提供了日誌的加強,能夠在日誌中打印出traceId,或者使用MDC.get("ptxId")獲取,但這個依賴於日誌,若是系統沒有打印日誌,MDC中就是空的,因此須要一個單獨獲取traceId的便捷方法日誌

實現思路get

也是和添加tag思路同樣,只須要暴露一個util類,再對它進行加強,在after方法裏獲取當前的traceId,將它賦值給方法的返回值,這裏經過實踐發現不能直接返回一個String,修改這個String的值,並不能改變最終的結果,須要包裝成一個類,再修改裏面的屬性。io

相關文章
相關標籤/搜索