追蹤記錄取樣

追蹤記錄取樣會決定 Cloud Trace 要擷取的哪些要求和範圍,協助您控管儲存空間費用並維持在配額內,同時擷取足夠的資料來排解應用程式效能問題。記錄端對端要求中的每個時距後,追蹤記錄即完成。不過,為了管理大量要求,分散式追蹤系統中的元件通常只會對部分追蹤記錄取樣,或遵循父項範圍的取樣決策。

取樣與脈絡傳播不同。 取樣會控制元件是否記錄跨度資料。相較之下,脈絡傳播會在元件之間傳遞追蹤 ID,因此取樣的時距可以連結在一起。

取樣策略

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

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

以頭部為基礎的取樣

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

  • 使用「一律取樣」設定時,處理及寫入追蹤記錄資料的元件會對每個範圍取樣。理想情況下,所有追蹤記錄都是完整的,因此您擁有排解失敗問題所需的資訊。不過,如果一律採用取樣設定,可能會導致您超出配額或儲存費用上限。

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

追蹤記錄可能不會包含每個 span。如果您使用機率取樣、超出配額,或使用會處理但不會取樣跨度的元件,則預期會出現不完整的追蹤記錄。

尾部取樣

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

如果您使用尾端取樣,也可以使用中繼伺服器接收追蹤記錄資料、評估取樣決策,並將取樣的範圍轉送至 Trace。舉例來說,您可以搭配使用 OpenTelemetry CollectorTail Sampling Processor,延後取樣決策。

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

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

元件會做出取樣決策

每個元件都會自行決定是否要取樣處理中的時距。不過,父項的取樣決策 (可能透過追蹤內容提供給元件) 會影響元件的決策。使用 traceparent 標頭的應用程式可以透過 sampled 標記傳遞上層的取樣決策。

舉例來說,假設每個元件都有一項規則,指出「如果取樣父項範圍,則取樣目前的範圍;否則,取樣 50% 的範圍」。在此情境中,下列情況屬實:

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

取樣和 Google Cloud 服務

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

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

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

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

後續步驟