SpringCloud 在客戶端和服務(wù)器之間共享范圍ID

2023-12-01 15:46 更新

正常的檢測模式是創(chuàng)建一個(gè)跨度,該跨度代表RPC的服務(wù)器端。Extractor.extract在應(yīng)用于傳入的客戶端請求時(shí)可能返回完整的跟蹤上下文。Tracer.joinSpan嘗試使用相同的跨度ID(如果支持)或不創(chuàng)建子跨度來繼續(xù)此跟蹤。當(dāng)跨度ID被共享時(shí),報(bào)告的數(shù)據(jù)包括這樣的標(biāo)志。

下圖顯示了B3傳播的示例:

                              ┌───────────────────┐      ┌───────────────────┐
 Incoming Headers             │   TraceContext    │      │   TraceContext    │
┌───────────────────┐(extract)│ ┌───────────────┐ │(join)│ ┌───────────────┐ │
│ X─B3-TraceId      │─────────┼─┼> TraceId      │ │──────┼─┼> TraceId      │ │
│                   │         │ │               │ │      │ │               │ │
│ X─B3-ParentSpanId │─────────┼─┼> ParentSpanId │ │──────┼─┼> ParentSpanId │ │
│                   │         │ │               │ │      │ │               │ │
│ X─B3-SpanId       │─────────┼─┼> SpanId       │ │──────┼─┼> SpanId       │ │
└───────────────────┘         │ │               │ │      │ │               │ │
                              │ │               │ │      │ │  Shared: true │ │
                              │ └───────────────┘ │      │ └───────────────┘ │
                              └───────────────────┘      └───────────────────┘

某些傳播系統(tǒng)僅轉(zhuǎn)發(fā)在Propagation.Factory.supportsJoin() == false時(shí)檢測到的父范圍ID。在這種情況下,始終會(huì)提供一個(gè)新的跨度ID,而傳入的上下文將確定父ID。

下圖顯示了AWS傳播的示例:

                              ┌───────────────────┐      ┌───────────────────┐
 x-amzn-trace-id              │   TraceContext    │      │   TraceContext    │
┌───────────────────┐(extract)│ ┌───────────────┐ │(join)│ ┌───────────────┐ │
│ Root              │─────────┼─┼> TraceId      │ │──────┼─┼> TraceId      │ │
│                   │         │ │               │ │      │ │               │ │
│ Parent            │─────────┼─┼> SpanId       │ │──────┼─┼> ParentSpanId │ │
└───────────────────┘         │ └───────────────┘ │      │ │               │ │
                              └───────────────────┘      │ │  SpanId: New  │ │
                                                         │ └───────────────┘ │
                                                         └───────────────────┘

注意:某些跨度報(bào)告程序不支持共享跨度ID。例如,如果設(shè)置了Tracing.Builder.spanReporter(amazonXrayOrGoogleStackdrive),則應(yīng)通過設(shè)置Tracing.Builder.supportsJoin(false)來禁用加入。這樣做會(huì)在Tracer.joinSpan()上強(qiáng)制一個(gè)新的子跨度。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號