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