追蹤記錄取樣

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

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

  • 根範圍會決定是否對追蹤記錄中的所有範圍取樣。
  • 如果取樣根範圍,系統會取樣追蹤記錄中的所有範圍。因此,追蹤作業已完成。

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

請勿將取樣與脈絡傳播混淆。取樣是指元件是否記錄有關時距的資料。脈絡傳播是指是否將跨度相關資訊 (例如跨度 ID) 傳遞至子元件。

取樣策略

取樣決策可根據開頭或結尾。在以標頭為準的取樣中,當處理範圍的元件收到要求時,就會做出取樣決定。在尾部取樣中,取樣決策會延遲,直到整個追蹤記錄可用為止。

您可能會在分散式追蹤系統的說明文件中看到「100% 抽樣」一詞。這個片語可能適用於追蹤或元件。套用至追蹤記錄時,表示所有範圍都已取樣,或等同於追蹤記錄完整。套用至元件時,表示元件會對處理的每個範圍進行取樣。

以頭部為基礎的取樣

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

  • 使用「一律取樣」設定時,服務涵蓋的所有元件都會取樣處理的範圍,這些元件可以寫入追蹤資料。理想情況下,所有追蹤記錄都是完整的,因此您擁有排解失敗問題所需的資訊。這類設定可能會導致您超出配額或儲存空間費用上限。

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

追蹤記錄可能不會包含每個時距。這可能是因為使用機率取樣,也可能是因為配額或處理要求但不對時距取樣的元件。

尾部取樣

Cloud Trace 不支援尾端取樣,取樣決策必須在將資料傳送至 Cloud Trace 的元件中進行。

如要使用尾端取樣,可以透過中繼伺服器接收追蹤資訊,並在做出取樣決策後,將資料轉送至 Cloud Trace。舉例來說,您可以搭配使用 Tail Sampling ProcessorOpenTelemetry Collector,延後取樣決策。

如果您打算使用尾部取樣,請注意下列事項:

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

取樣和 Google Cloud 服務

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

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

  • 預設取樣率。
  • 這項機制會使用父項的取樣決策做為提示,判斷是否要對時距取樣。
  • 取樣率上限。

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

後續步驟