架構
另請參閱
術語
Jaeger 在一個受 OpenTracing 規範 啟發的資料模型中呈現追蹤資料。該資料模型在邏輯上與 OpenTelemetry Traces 非常相似,但有一些命名差異
Jaeger | OpenTelemetry | 注意事項 |
---|---|---|
標籤 | 屬性 | 兩者都支援類型值,但 Jaeger 不支援巢狀標籤。 |
Span 記錄 | Span 事件 | 以結構化形式記錄在 span 上的時間點事件。 |
Span 參照 | Span 連結 | Jaeger 的 Span 參照具有必要的類型(child-of 或 follows-from ),並且始終參照前導 span;OpenTelemetry 的 Span 連結沒有類型,但允許屬性。 |
處理序 | 資源 | 描述產生遙測的實體的結構。 |
Span
span 代表一個具有操作名稱、操作開始時間和持續時間的邏輯工作單元。Span 可以巢狀和排序以建立因果關係模型。
追蹤
追蹤表示通過系統的資料或執行路徑。它可以被視為 span 的有向無環圖。
行李
行李是可以附加到分散式環境並由追蹤 SDK 傳播的任意使用者定義中繼資料(鍵值對)。有關更多資訊,請參閱 W3C 行李 。
架構
Jaeger 可以部署為 all-in-one 二進位檔,其中所有 Jaeger 後端元件都在單個處理序中執行,也可以部署為可擴展的分散式系統。以下討論兩種主要部署選項。
直接到儲存
在此部署中,收集器從追蹤的應用程式接收資料,並將其直接寫入儲存。儲存必須能夠處理平均流量和峰值流量。收集器使用記憶體內佇列來平滑短期流量峰值,但是如果儲存無法跟上,持續的流量峰值可能會導致資料丟失。
收集器能夠集中為 SDK 提供取樣組態,稱為遠端取樣模式 。它們還可以啟用自動取樣組態計算,稱為自適應取樣 。
透過 Kafka
為了防止收集器和儲存之間的資料遺失,Kafka 可以用作中間的持久佇列。需要部署一個額外的元件 jaeger-ingester,以從 Kafka 讀取資料並儲存到資料庫。可以部署多個 jaeger-ingester 來擴展擷取;它們會自動在它們之間分割負載。
使用 OpenTelemetry 收集器
您不需要使用 OpenTelemetry 收集器,因為 jaeger-collector 可以直接從 OpenTelemetry SDK 接收 OpenTelemetry 資料(使用 OTLP 匯出器)。但是,如果您已經使用 OpenTelemetry 收集器,例如為了收集其他類型的遙測或為了預先處理/豐富追蹤資料,則可以將其放置在 SDK 和 jaeger-collector 之間。OpenTelemetry 收集器可以作為應用程式 Sidecar、作為主機代理/精靈或作為中央叢集執行。
OpenTelemetry 收集器支援 Jaeger 的遠端取樣協定,並且可以直接從組態檔提供靜態組態,或者將請求代理到 Jaeger 後端(例如,在使用自適應取樣時)。
OpenTelemetry 收集器作為 Sidecar/主機代理
優點
- 簡化了 SDK 組態,因為追蹤匯出端點和取樣組態端點都可以指向本機主機,而不必擔心發現這些服務在遠端執行。
- 收集器可能會透過新增環境資訊(例如 k8s Pod 名稱)來提供資料豐富化。
- 資料豐富化的資源使用量可以分佈在所有應用程式主機上。
缺點
- 額外一層的編組/解組資料。
OpenTelemetry 收集器作為遠端叢集
優點
- 分片功能,例如,在使用 基於尾端的取樣 時。
缺點
- 額外一層的編組/解組資料。
元件
本節詳細介紹了 Jaeger 的組成部分以及它們之間的相互關係。它的排列順序是您的應用程式中的 span 與它們互動的順序。
追蹤 SDK
為了產生追蹤資料,必須對應用程式進行檢測。檢測後的應用程式會在接收新請求時建立 span,並將上下文資訊(追蹤 id、span id 和行李)附加到外送請求。只有 id 和行李會與請求一起傳播;所有其他分析資料(例如操作名稱、時間、標籤和記錄)都不會傳播。相反,它會在背景中非同步匯出到 Jaeger 後端。
應用程式的檢測方法有很多種:
- 手動方式,直接使用追蹤 API;
- 依賴為各種現有開放原始碼框架建立的檢測功能;
- 自動方式,透過位元碼操作、monkey-patching、eBPF 和類似技術。
檢測通常不應依賴特定的追蹤 SDK,而只應依賴抽象的追蹤 API,例如 OpenTelemetry API。追蹤 SDK 實作追蹤 API 並負責資料匯出。
檢測設計為在生產環境中始終開啟。為了盡量減少開銷,SDK 會採用各種抽樣策略。當對追蹤進行抽樣時,會擷取效能分析 span 資料並傳輸到 Jaeger 後端。當未對追蹤進行抽樣時,不會收集任何效能分析資料,而且對追蹤 API 的呼叫會短路,以產生最小的開銷。如需更多資訊,請參閱抽樣頁面。
代理程式
jaeger-agent 是一個網路守護程式,會監聽透過 UDP 傳送的 span,這些 span 會批次處理並傳送到收集器。它設計為作為基礎架構元件部署到所有主機。代理程式將收集器的路由和探索從用戶端抽象化。jaeger-agent 並非必要元件。
收集器
jaeger-collector 接收追蹤,透過處理管線執行這些追蹤以進行驗證和清理/豐富化,並將其儲存在儲存後端中。Jaeger 內建支援多個儲存後端(請參閱部署),以及用於實作自訂儲存外掛程式的可擴充外掛程式框架。
查詢
jaeger-query 是一項服務,可公開API 以從儲存空間擷取追蹤,並託管 Web UI 以搜尋和分析追蹤。
擷取器
jaeger-ingester 是一項服務,可從 Kafka 讀取追蹤並將其寫入儲存後端。實際上,它是 Jaeger 收集器的精簡版本,僅支援 Kafka 作為唯一輸入協定。