追蹤記錄取樣會決定 Cloud Trace 要擷取的哪些要求和範圍,協助您控管儲存空間費用並維持在配額內,同時擷取足夠的資料來排解應用程式效能問題。記錄端對端要求中的每個時距後,追蹤記錄即完成。不過,為了管理大量要求,分散式追蹤系統中的元件通常只會對部分追蹤記錄取樣,或遵循父項範圍的取樣決策。
取樣與脈絡傳播不同。 取樣會控制元件是否記錄跨度資料。相較之下,脈絡傳播會在元件之間傳遞追蹤 ID,因此取樣的時距可以連結在一起。
取樣策略
取樣決策可分為頭部取樣或尾部取樣。 在以標頭為準的取樣中,當處理範圍的元件收到要求時,就會做出取樣決定。在尾端取樣中,取樣決策會延遲,直到整個追蹤記錄都可用為止。
您可能會在分散式追蹤系統的說明文件中看到「100% 抽樣」一詞。這個片語可能適用於追蹤或元件。套用至追蹤記錄時,表示所有範圍都已取樣,或等同於追蹤記錄完整。套用至元件時,表示元件會對處理的每個範圍進行取樣。
以頭部為基礎的取樣
通常會將以標頭為準的取樣器設為一律對跨度取樣,或使用機率取樣策略:
使用「一律取樣」設定時,處理及寫入追蹤記錄資料的元件會對每個範圍取樣。理想情況下,所有追蹤記錄都是完整的,因此您擁有排解失敗問題所需的資訊。不過,如果一律採用取樣設定,可能會導致您超出配額或儲存費用上限。
使用機率取樣時,系統不會對所有跨度取樣。 這個方法的實際行為取決於元件的實作方式。在某些實作方式中,所有範圍的取樣機率都相同。在其他情況下,父項的取樣決定會影響是否對 Span 取樣。
追蹤記錄可能不會包含每個 span。如果您使用機率取樣、超出配額,或使用會處理但不會取樣跨度的元件,則預期會出現不完整的追蹤記錄。
尾部取樣
Cloud Trace 不支援尾端取樣,取樣決策必須在將資料傳送至 Cloud Trace 的元件中進行。
如果您使用尾端取樣,也可以使用中繼伺服器接收追蹤記錄資料、評估取樣決策,並將取樣的範圍轉送至 Trace。舉例來說,您可以搭配使用 OpenTelemetry Collector 和 Tail Sampling Processor,延後取樣決策。
如果您打算使用尾部取樣,請注意下列事項:
- 您必須先將所有範圍儲存在追蹤記錄中,才能做出取樣決策。 因此,您可能需要大量暫時儲存空間,或產生其他額外費用。
- 一般來說,所有可為追蹤記錄產生範圍的元件都需要協調。一般來說,使用 OpenTelemetry 的開發人員會將相同追蹤 ID 的所有範圍,都傳送至同一個收集器。
元件會做出取樣決策
每個元件都會自行決定是否要取樣處理中的時距。不過,父項的取樣決策 (可能透過追蹤內容提供給元件) 會影響元件的決策。使用 traceparent 標頭的應用程式可以透過 sampled 標記傳遞上層的取樣決策。
舉例來說,假設每個元件都有一項規則,指出「如果取樣父項範圍,則取樣目前的範圍;否則,取樣 50% 的範圍」。在此情境中,下列情況屬實:
- 根範圍會決定是否對追蹤記錄中的所有範圍取樣。
- 如果取樣根範圍,系統會取樣追蹤記錄中的所有範圍。因此,追蹤作業已完成。
取樣和 Google Cloud 服務
每項 Google Cloud 服務都會自行決定是否要取樣,並非所有 Google Cloud 服務都會取樣。也就是說,服務可能永遠不會將資料傳送至 Cloud Trace。
如果 Google Cloud 服務支援取樣,通常會實作下列項目:
- 預設取樣率。
- 這項機制會使用父項的取樣決策,做為是否對 span 取樣的提示。
- 取樣率上限。
如要要求 Google Cloud 服務新增取樣支援功能,請使用 Google Issue Tracker。
後續步驟
如要瞭解如何依 span 名稱選擇取樣策略,請參閱 Jaeger 遠端取樣。
建議您參閱下列開放原始碼說明文件,協助您判斷哪種取樣方法最適合開發中和已部署的應用程式:
Google Cloud 服務說明文件: