烏克蘭國旗 我們與在烏克蘭的朋友和同事同在。為了在烏克蘭需要時支持他們,請造訪此頁面

架構

版本  1.62 最新

另請參閱


術語

Jaeger 在一個受 OpenTracing 規範外部連結 啟發的資料模型中呈現追蹤資料。該資料模型在邏輯上與 OpenTelemetry Traces外部連結 非常相似,但有一些命名差異

JaegerOpenTelemetry注意事項
標籤屬性兩者都支援類型值,但 Jaeger 不支援巢狀標籤。
Span 記錄Span 事件以結構化形式記錄在 span 上的時間點事件。
Span 參照Span 連結Jaeger 的 Span 參照具有必要的類型(child-offollows-from),並且始終參照前導 span;OpenTelemetry 的 Span 連結沒有類型,但允許屬性。
處理序資源描述產生遙測的實體的結構。

Span

span 代表一個具有操作名稱、操作開始時間和持續時間的邏輯工作單元。Span 可以巢狀和排序以建立因果關係模型。

Traces And Spans

追蹤

追蹤表示通過系統的資料或執行路徑。它可以被視為 span 的有向無環圖。

行李

行李是可以附加到分散式環境並由追蹤 SDK 傳播的任意使用者定義中繼資料(鍵值對)。有關更多資訊,請參閱 W3C 行李外部連結

架構

Jaeger 可以部署為 all-in-one 二進位檔,其中所有 Jaeger 後端元件都在單個處理序中執行,也可以部署為可擴展的分散式系統。以下討論兩種主要部署選項。

直接到儲存

在此部署中,收集器從追蹤的應用程式接收資料,並將其直接寫入儲存。儲存必須能夠處理平均流量和峰值流量。收集器使用記憶體內佇列來平滑短期流量峰值,但是如果儲存無法跟上,持續的流量峰值可能會導致資料丟失。

收集器能夠集中為 SDK 提供取樣組態,稱為遠端取樣模式 。它們還可以啟用自動取樣組態計算,稱為自適應取樣

Architecture

透過 Kafka

為了防止收集器和儲存之間的資料遺失,Kafka 可以用作中間的持久佇列。需要部署一個額外的元件 jaeger-ingester,以從 Kafka 讀取資料並儲存到資料庫。可以部署多個 jaeger-ingester 來擴展擷取;它們會自動在它們之間分割負載。

Architecture

使用 OpenTelemetry 收集器

不需要使用 OpenTelemetry 收集器,因為 jaeger-collector 可以直接從 OpenTelemetry SDK 接收 OpenTelemetry 資料(使用 OTLP 匯出器)。但是,如果您已經使用 OpenTelemetry 收集器,例如為了收集其他類型的遙測或為了預先處理/豐富追蹤資料,則可以將其放置在 SDK 和 jaeger-collector 之間。OpenTelemetry 收集器可以作為應用程式 Sidecar、作為主機代理/精靈或作為中央叢集執行。

OpenTelemetry 收集器支援 Jaeger 的遠端取樣協定,並且可以直接從組態檔提供靜態組態,或者將請求代理到 Jaeger 後端(例如,在使用自適應取樣時)。

Architecture

OpenTelemetry 收集器作為 Sidecar/主機代理

優點

  • 簡化了 SDK 組態,因為追蹤匯出端點和取樣組態端點都可以指向本機主機,而不必擔心發現這些服務在遠端執行。
  • 收集器可能會透過新增環境資訊(例如 k8s Pod 名稱)來提供資料豐富化。
  • 資料豐富化的資源使用量可以分佈在所有應用程式主機上。

缺點

  • 額外一層的編組/解組資料。

OpenTelemetry 收集器作為遠端叢集

優點

缺點

  • 額外一層的編組/解組資料。

元件

本節詳細介紹了 Jaeger 的組成部分以及它們之間的相互關係。它的排列順序是您的應用程式中的 span 與它們互動的順序。

追蹤 SDK

為了產生追蹤資料,必須對應用程式進行檢測。檢測後的應用程式會在接收新請求時建立 span,並將上下文資訊(追蹤 id、span id 和行李)附加到外送請求。只有 id 和行李會與請求一起傳播;所有其他分析資料(例如操作名稱、時間、標籤和記錄)都不會傳播。相反,它會在背景中非同步匯出到 Jaeger 後端。

Context propagation explained

應用程式的檢測方法有很多種:

  • 手動方式,直接使用追蹤 API;
  • 依賴為各種現有開放原始碼框架建立的檢測功能;
  • 自動方式,透過位元碼操作、monkey-patching、eBPF 和類似技術。

檢測通常不應依賴特定的追蹤 SDK,而只應依賴抽象的追蹤 API,例如 OpenTelemetry API。追蹤 SDK 實作追蹤 API 並負責資料匯出。

檢測設計為在生產環境中始終開啟。為了盡量減少開銷,SDK 會採用各種抽樣策略。當對追蹤進行抽樣時,會擷取效能分析 span 資料並傳輸到 Jaeger 後端。當未對追蹤進行抽樣時,不會收集任何效能分析資料,而且對追蹤 API 的呼叫會短路,以產生最小的開銷。如需更多資訊,請參閱抽樣頁面。

代理程式

jaeger-agent棄用外部連結。OpenTelemetry 資料可以從 OpenTelemetry SDK (配備 OTLP 匯出器) 直接傳送到 jaeger-collector。或者,使用 OpenTelemetry Collector 作為本機代理程式。

jaeger-agent 是一個網路守護程式,會監聽透過 UDP 傳送的 span,這些 span 會批次處理並傳送到收集器。它設計為作為基礎架構元件部署到所有主機。代理程式將收集器的路由和探索從用戶端抽象化。jaeger-agent 並非必要元件。

收集器

jaeger-collector 接收追蹤,透過處理管線執行這些追蹤以進行驗證和清理/豐富化,並將其儲存在儲存後端中。Jaeger 內建支援多個儲存後端(請參閱部署),以及用於實作自訂儲存外掛程式的可擴充外掛程式框架。

查詢

jaeger-query 是一項服務,可公開API 以從儲存空間擷取追蹤,並託管 Web UI 以搜尋和分析追蹤。

擷取器

jaeger-ingester 是一項服務,可從 Kafka 讀取追蹤並將其寫入儲存後端。實際上,它是 Jaeger 收集器的精簡版本,僅支援 Kafka 作為唯一輸入協定。