2017-07-11 23 views
2

我目前正試圖瞭解如何以可擴展的方式自定義Spring Cloud Sleuth以將信息添加到每個Span。如何使用Spring Cloud Sleuth將信息添加到每個跨度

我迄今爲止嘗試:

用我自己實現的GenericFilterBeanHandlerInterceptorAdapter,讓他們在構造一個Tracer和寫入標籤每次他們被稱爲與tracer.addTag("key", "value")

我看看關於新的行李信息的想法 - 但是我對它的解釋是全局性的,因爲跟蹤在不同服務/機器上有多個請求,所以它不適合我在服務/機器級別添加信息的目的。

到目前爲止,從過濾器和攔截器標記獲取設置一些跨度,但不是所有的,當我檢查是通過spring-cloud-stream-binder-kafka

寫入我的卡夫卡話題JSON所以我的問題是:哪些類型的請求/行爲確實存在,可以創建跨度,以及向這些跨度注入什麼的適當方式。因爲我想將這個實現部署到幾個微服務中,所以我不想註釋每一種方法,或者做類似的工作密集型的工作,因此不可擴展的方法。

回答

1

有很多這樣的地方......但實際上,我們可以從另一個角度解決問題。有一個地方可以掛鉤 - 跨度關閉時。 https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanReporter.java - 你可以創建你自己的實現SpanReporter,在委託之前,例如Zipkin span記者會添加一個標籤。更簡單的方法是在註冊之前註冊調整跨度的SpanAdjuster bean。這樣你可以只在一個地方添加標籤。

+0

'SpanAdjuster'聽起來很完美。然而,當我嘗試註冊一個實現'SpanAdjuster'的類時,它與我的@Configuration類中的過濾器和攔截器一起,因爲跟蹤器,我得到週期性依賴關係,因此我必須注入過濾器和注入器的構造函數。我以錯誤的方式嘗試嗎?有沒有推薦的方法來解決這個問題? – LST

+0

我想你需要顯示一些代碼。你能把它上傳到什麼地方嗎? –

+0

但是追蹤器在任何地方都是必需的,而且它是以另一種配置構建的。你沒有循環依賴。你也可以檢查span是否可導出,如果是這種情況,只需在標籤上直接設置標籤。那麼不需要注射示蹤劑。 –

相關問題