追蹤記錄取樣

本文件將介紹「取樣」概念,也就是指是否將「時距」資料傳送至 Cloud Trace。將時距的資料傳送至 Cloud Trace 時,系統會取樣該時距。當記錄追蹤記錄中每個區間的資料時,追蹤記錄就會完成。不過,由於分散式追蹤系統中的每個檢測元件都會自行決定是否要記錄正在處理的跨度,因此追蹤記錄經常會遺漏跨度。

雖然每個元件都會自行決定要處理的區間是否要進行取樣,但這項決定可能會受到父項的取樣決策影響。舉例來說,假設每個元件都有一項規則,指出「如果父項範圍已取樣,則取樣目前的範圍;否則,取樣 50% 的範圍」。在這個情境中,下列情況為真:

  • 根時距會決定是否要對追蹤記錄中的所有時距進行取樣。
  • 取樣根範圍時,系統會取樣追蹤記錄中的所有範圍。因此,追蹤已完成。

元件可透過使用內容,將取樣決定傳遞給子項。舉例來說,在全球資訊網協會 (W3C) traceparent 標頭中,sampled 標記會儲存父項的取樣決策。

請勿將抽樣與內容傳播混淆。取樣是指元件是否記錄跨度的資料。關於結構的資訊 (例如結構 ID) 是否會傳遞至子項元件,稱為「內容傳播」。

取樣策略

取樣決策可以是根據前段或尾端。在以標頭為準的取樣中,當元件處理區間時收到要求,系統就會做出取樣決定。在以尾端為準的取樣中,系統會延遲取樣決定,直到整個追蹤記錄可供使用為止。

在分散式追蹤系統的說明文件中,您可能會看到「100% 取樣」這個詞組。這個詞組可能適用於追蹤記錄或元件。套用至追蹤記錄時,表示所有區間都已取樣,也就是說,追蹤記錄已完成。套用至元件時,表示元件會對處理的每個區間進行取樣。

以頭部為基準的取樣

以頭為準的取樣器通常會設定為一律取樣跨度,或使用機率取樣策略:

  • 一律取樣設定中,所有服務區間的元件都能寫入追蹤資料,並取樣所處理的區間。理想情況下,所有追蹤記錄都會完成,因此您可以取得排解失敗問題所需的資訊。這類設定可能會導致您超出配額或儲存空間費用限制。

  • 使用概率取樣時,系統不會對所有區間進行取樣。這項方法的實際行為取決於元件的實作方式。在某些實作中,所有跨度的取樣機率都相同。在其他情況下,父項的取樣決定會影響是否要對某個區間進行取樣。

記錄可能不會包含每個區間。這可能是因為使用機率取樣,也可能是因為配額,或是元件處理要求但未取樣區間。

以尾端為基礎的取樣

Cloud Trace 不支援以尾端為基礎的取樣,因此必須在傳送資料至 Cloud Trace 的元件中做出取樣決策。

如果您想使用以尾端為基礎的取樣,可以使用會在做出取樣決策後,將資料轉送至 Cloud Trace 的轉接伺服器。舉例來說,您可以使用 OpenTelemetry 收集器搭配 尾端取樣處理器,做出延遲取樣的決定。

如果您打算使用尾端取樣,請考量下列事項:

  • 您必須先在追蹤記錄中儲存所有區間,才能做出取樣決策。因此,您可能需要大量暫時性儲存空間,或產生其他額外負擔。
  • 一般來說,所有可產生追蹤記錄區間的元件都需要協調。一般來說,使用 OpenTelemetry 的開發人員會將相同追蹤 ID 的所有跨度導向至相同收集器。

取樣和 Google Cloud 服務

每項 Google Cloud 服務都會自行決定是否要取樣,並非所有 Google Cloud 服務都會取樣。也就是說,服務可能從未將資料傳送至 Cloud Trace。

如果 Google Cloud 服務支援取樣功能,該服務通常會實作以下項目:

  • 預設取樣率。
  • 使用父項的取樣決定做為提示,決定是否要取樣區間的機制。
  • 取樣率上限。

如要要求 Google Cloud 服務新增取樣支援功能,請使用 Google Issue Tracker

後續步驟