什麼是 Jaeger?
Jaeger 是一種可用於監控和解決互連軟體元件 (稱為微型服務) 問題的軟體。多個微型服務可彼此通訊,以完成單一軟體功能。開發人員使用 Jaeger 來視覺化這些微型服務互動中的事件鏈結,以便在出現問題時隔離問題。Jaeger 也稱為 Jaeger Tracing,因為其可透過一系列的微型服務互動來跟蹤或追蹤請求的路徑。
為什麼 Jaeger 很重要?
過去,軟體設計是整合型的,即將多個功能捆綁在單個程式碼庫中。例如,為了設計一個食品訂購應用程式,食品菜單、餐廳和支付系統都要捆綁在一個軟體單位中。這類軟體設計使解決方案更加複雜且難以維護。當開發人員在一個區域進行程式碼變更時,它會影響整個系統,使變更管理成為一個漫長而乏味的過程。為了解決這個問題,架構設計變得更加模組化。
微型服務
現代應用程式可充當稱為微型服務的較小獨立單位的集合。例如,現代食品訂購應用程式可能包含以下部分:
- 用於偵測客戶位置的地理定位服務
- 收集訂單並將其傳送到餐廳的服務
- 具有多種支付選項的支付閘道
每個微型服務都作為一個獨立的應用程式運作,並且可以存取自己的資料庫和邏輯。微型服務可使用請求與回應彼此進行通訊,例如 Web 應用程式。微型服務基礎系統也稱為分散式系統。
對微型服務架構進行疑難排解
由於微型服務的複雜行為,研究分散式系統中的問題可說是挑戰重重。例如,在模組化應用程式上訂購食物可能會觸發對不同微型服務的多個請求。這些請求可以並行且獨立發生,且無需連續。如果食品訂單出現問題,開發人員需要確定是哪個微型服務引起的。傳統的問題追蹤方法僅提供請求的部分情況,進而使得微型服務疑難排解變得乏味。
Jaeger 是一種軟體工具,IT 團隊使用它來取得對整個事件鏈結的可見性和清晰度。他們可以更快地解決問題並改善客戶體驗。
Jaeger 的用途是什麼?
開發人員使用 Jaeger 以幾種不同的方式提高分散式系統的效能。以下是我們給出的一些範例。
分散式交易監控
Jaeger 具有監控微型服務之間的資料移動的功能。開發人員可以採取積極主動的方法,以在破壞使用者體驗之前偵測和解決問題。
延遲最佳化
Jaeger 分析可以找到微型服務中會降低應用程式速度的瓶頸。開發人員使用 Jaeger 來檢查微型服務的行為並找到加快其速度的方法。
根本原因分析
在微型服務架構中,一個問題可能會導致其他問題。開發人員可以使用 Jaeger 找到應用程式中一系列相關問題的起點。
服務相依性分析
服務相依性意味著一個應用程式需依賴幾個元件來執行。例如,導覽應用程式依賴行動應用程式上的定位服務。開發人員使用 Jaeger 來了解不同微型服務之間的複雜關係。
分散式內容傳播
分散式內容傳播是應用程式與資料一起傳遞描述性資訊的方式。這有助於開發人員從整體上評估微型服務效能。例如,Jaeger 使用客戶姓名標記訂單請求,以便開發人員可以將請求路徑與特定客戶相關聯。
Jaeger 如何運作?
Jaeger 是以分散式追蹤原理為依據運作,並使用 OpenTracing 架構。
分散式追蹤
分散式追蹤是一種監控微型服務之間的事件序列的軟體技術。它會追蹤所有連接並提供圖表以視覺化應用程式中的請求路徑。作為一種分散式追蹤工具,Jaeger 會為每個請求指派一個唯一的識別符,並在特定服務處理請求時收集資訊,進而追蹤請求移動。
OpenTracing
OpenTracing 是一個開放原始碼或免費提供的架構,它提供了在現代軟體系統中實現準確、完整的分散式追蹤的標準。例如,它提供了一個通用標準,可用於定義在微型服務之間傳輸的受監控資訊的結構。Jaeger 使用 OpenTracing 提供完整的解決方案來收集、儲存、管理、分析和視覺化微型服務資料。
OpenTracing 資料模型
OpenTracing 資料模型提供了連接來自不同元件的資料的基本定義。它使用的兩個主要術語是跨度和追蹤。
跨度
跨度是在分散式追蹤系統中完成的單一邏輯工作單元。每個跨度都有以下元件:
- 操作名稱
- 開始時間和停止時間
- 幫助開發人員分析跨度的標籤或值
- 儲存微型服務產生的任何訊息的日誌
- 跨度內容或跨度的附加描述
追蹤
追蹤是屬於同一進程的一個或多個跨度的集合。它代表在特定時間發生的事件。屬於同一追蹤的跨度共享相同的追蹤 ID。例如,當客戶訂購食物時產生的追蹤會產生以下跨度:
- 客戶提交訂單
- 付款已處理
- 訂單清單提交給餐廳
- 食物已領取
- 食物已送達
Jaeger 有哪些元件?
Jaeger 分散式追蹤平台由以下元件組成。
Jaeger 用戶端
Jaeger 用戶端包含使用 Go、JavaScript、Java、Python、Ruby 和 PHP 等程式設計語言的 OpenTracing API 的特定語言實作。
開發人員使用這些 API 來建立 Jaeger 跨度,而無需編寫用於分散式追蹤的原始程式碼。
Jaeger 代理程式
Jaeger 代理程式是網路常駐程式或進程,可在後台持續執行,以執行其他進程所需的函數。它會偵聽用戶端透過使用者資料包協定 (UDP) 傳送的跨度,這是一種允許應用程式透過網路交換訊息的通訊方法。
代理程式可連接到容器環境中的用戶端,如 Amazon Elastic Kubernetes Service。代理程式群組以批次方式建立跨度並將其傳送到收集器。這允許應用程式在不主動向 Jaeger 後端傳送追蹤資訊的情況下執行。
Jaeger 收集器
Jaeger 收集器是從 Jaeger 收集器擷取追蹤的軟體元件。它會檢查、處理和儲存資料庫中的追蹤。
儲存
Jaeger 追蹤系統會接收跨度並將它們儲存在持久性儲存後端或資料庫中。持久性儲存是指即使電腦已關閉電源,儲存的資料也會保持不變。例如,開發人員使用 AWS OpenSearch Service 作為持久型儲存來儲存和接受跨度。
Ingester
部署 Jaeger 的一種方法是將追蹤資料傳送到 Kafka,Kafka 是一個分散式系統,可供應用程式儲存和擷取資訊串流。Ingester 是從 Kafka 讀取追蹤資料並單獨儲存的模組。
查詢
查詢服務會從資料庫中擷取追蹤資訊。開發人員使用查詢來尋找具有特定時間、標籤、持續時間和操作的追蹤。
Jaeger 主控台
Jaeger 主控台是一個具有使用者介面的軟體程序,您可以使用它來檢視和分析追蹤。它以圖形和圖表的形式顯示追蹤資料。
開發人員如何使用 Jaeger?
當開發人員建置應用程式時,他們會使用 Jaeger 用戶端庫來建立跨度。透過向程序新增程式碼以產生追蹤資料,他們建立了所謂的經過檢測的應用程式。經過檢測的應用程式會自動產生以下內容:
- 包含跨度 ID、追蹤 ID、標籤、日誌和跨度內容的跨度
- 追蹤每個請求
開發人員使用 Jaeger 主控台來搜尋、篩選、視覺化和分析這些分散式追蹤資料。他們可以使用 Jaeger UI 軟體來檢視詳細資訊,例如進程持續時間、錯誤和來自微型服務的日誌。
什麼是 Jaeger 取樣策略?
當應用程式執行時,經過檢測的應用程式就會自動傳輸追蹤資料。您可以使用此追蹤資料來測量應用程式效能。它也稱為遙測資料。為防止 Jaeger 後端因遙測資料過多而無法負荷,您可以透過在 Jaeger 實現中設定取樣策略來對其進行篩選或取樣。以下是一些取樣策略:
- 固定取樣為所有類型的追蹤收集相同數量的樣本。
- 概率取樣會隨機收集樣本,直到達到一定百分比。
- 速率限制取樣會每秒擷取特定數量的樣本。
- 自適應取樣會自動調整取樣率,以在特定持續時間內實現一定的追蹤數量。
什麼是 AWS App Mesh?
AWS App Mesh 是一種可以完成繁重工作的服務網格或軟體基礎設施,讓您更輕鬆地管理基於微型服務的分散式系統。AWS App Mesh 執行以下動作:
- 為您的應用程式提供一致的端對端可見性和高可用性。
- 設定每個服務來輸出遙測資料,並且在您的應用程式中執行一致的通訊控制邏輯。
- 提供網路流量控制,協助開發人員建置安全的雲端應用程式。
可以將 AWS App Mesh 用作滿足分散式追蹤需求的獨立解決方案。該解決方案還支援多個非 AWS 第三方工具,例如 Jaeger,您可以使用這些工具監控、記錄或追蹤微型服務通訊。
立即建立 AWS 帳戶,開始在 App Mesh 上使用 Jaeger。