追蹤記錄取樣會決定 Cloud Trace 要擷取哪些要求和跨度,協助您控管儲存空間費用並維持在配額內,同時擷取足夠的資料來排解效能問題。如要管理大量要求,分散式追蹤系統中的元件通常只會對部分追蹤記錄取樣,或遵循父項範圍的取樣決策。
取樣與脈絡傳播不同:取樣會控管元件是否記錄範圍資料,而脈絡傳播會在元件之間傳遞追蹤 ID,因此取樣的範圍可以連結。
取樣策略
取樣決策可分為頭部取樣或尾部取樣。 在以標頭為準的取樣中,當處理範圍的元件收到要求時,系統會做出取樣決定。在尾部取樣中,取樣決策會延遲,直到整個追蹤記錄可用為止。
在分散式追蹤系統的說明文件中,您可能會看到「100% 抽樣」一詞。這個片語可能適用於追蹤或元件。套用至追蹤記錄時,表示所有範圍都已取樣,或等同於追蹤記錄完整。套用至元件時,表示元件會取樣處理的每個範圍。
以頭部為準的取樣
通常會將以標頭為準的取樣器設定為一律對跨度取樣,或使用機率取樣策略:
使用「一律取樣」設定時,處理及寫入追蹤記錄資料的元件會對每個範圍取樣。理想情況下,所有追蹤記錄都是完整的,因此您擁有排解失敗問題所需的資訊。不過,如果一律採用取樣設定,可能會導致您超出配額或儲存費用上限。
使用機率取樣時,系統不會對所有範圍取樣。 這個做法的實際行為取決於元件的實作方式。在某些實作方式中,所有範圍的取樣機率都相同。在其他情況下,父項的取樣決定會影響是否對 Span 取樣。
追蹤記錄可能不會包含所有時距。如果您使用機率取樣、超出配額,或使用會處理但不會取樣跨度的元件,則預期會出現不完整的追蹤記錄。
以尾部為基礎的取樣
Cloud Trace 不支援尾端取樣,取樣決策必須在將資料傳送至 Cloud Trace 的元件中進行。
如果您使用尾端取樣,也可以使用中繼伺服器接收追蹤記錄資料、評估取樣決策,並將取樣的範圍轉送至 Trace。舉例來說,您可以搭配使用 尾部取樣處理器和 OpenTelemetry Collector,延後取樣決策。
如果您打算使用尾部取樣,請注意下列事項:
- 您必須先將所有範圍儲存在追蹤記錄中,才能做出取樣決策。 因此,您可能需要大量暫時儲存空間,或產生其他額外負擔。
- 一般來說,所有可為追蹤記錄產生範圍的元件都需要協調。一般來說,使用 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 服務說明文件: