天天看點

在k8s上搭建微服務鍊路追蹤,并将資料存儲到ES

作者:簡簡單單程式員

Jaeger 是一個分布式追蹤系統,它用于監控、分析和診斷微服務之間的互動。Jaeger 可以幫助開發者和運維團隊識别性能瓶頸、調試請求路徑和了解系統行為。Jaeger 由 Uber 開發,并作為 Cloud Native Computing Foundation(CNCF)的一部分,它與 Kubernetes 和 Elasticsearch 等雲原生技術非常相容。

将 Jaeger 資料存儲在 Elasticsearch 上具有以下優點:

  1. 高可擴充性:Elasticsearch 是一個分布式搜尋和分析引擎,它具有高度可擴充性,可以輕松地在多個節點上進行分片和複制。這使得 Elasticsearch 成為大型微服務環境中處理 Jaeger 資料的理想選擇。
  2. 高性能查詢:Elasticsearch 提供了高性能的實時查詢,這對于 Jaeger 這樣需要高速查詢追蹤資料的工具非常重要。借助 Elasticsearch,您可以快速地查詢和分析跨越數百萬條追蹤的資料。
  3. 資料可視化和分析:Elasticsearch 與 Kibana 內建良好,Kibana 是一個強大的資料可視化和分析工具。您可以使用 Kibana 建立定制的儀表闆和可視化工具,深入了解您的 Jaeger 資料,以便更好地監控和優化您的微服務。
  4. 資料持久性和備份:Elasticsearch 支援資料的快照和恢複功能,這使得備份和恢複 Jaeger 資料變得更加簡單。這對于保護關鍵追蹤資料和滿足業務連續性需求至關重要。
  5. 成熟的生态系統:Elasticsearch 擁有一個龐大的社群和豐富的插件生态系統。這意味着您可以利用現有的工具和插件輕松地擴充和定制 Jaeger 和 Elasticsearch 的功能,以滿足您的特定需求。
  6. 雲原生相容性:Elasticsearch 與 Kubernetes 和其他雲原生技術非常相容,這使得在 Kubernetes 等平台上部署和管理 Jaeger 和 Elasticsearch 變得更加簡單。

部署Jaeger

鏡像:jaegertracing/all-in-one:1.30

環境變量:

# 設定存儲類型為elasticsearch
SPAN_STORAGE_TYPE=elasticsearch
# 設定es位址
ES_SERVER_URLS=http://176.16.77.80:9200           
在k8s上搭建微服務鍊路追蹤,并将資料存儲到ES

端口說明

Jaeger Agent:
端口 6831/UDP:用于接收由用戶端(例如 Jaeger 用戶端庫)發送的追蹤資料(采用 Thrift over UDP 協定)。
端口 6832/UDP:用于接收由用戶端(例如 Jaeger 用戶端庫)發送的追蹤資料(采用 Jaeger 協定)。
端口 5778/HTTP:用于接收采樣政策配置的查詢請求。

Jaeger Collector:
端口 14250/GRPC:用于接收由 Jaeger Agent 發送的追蹤資料(采用 gRPC 協定)。
端口 14268/HTTP:用于接收由 Jaeger Agent 發送的追蹤資料(采用 Thrift over HTTP 協定)。
端口 9411/HTTP:用于接收 Zipkin 格式的追蹤資料(采用 Zipkin 協定)。
端口 14269/HTTP:用于接收 Jaeger Collector 的健康檢查請求。

Jaeger Query:
端口 16686/HTTP:用于提供 Jaeger UI 和查詢 API,以支援查詢和可視化追蹤資料。

Jaeger Ingester(可選):
端口 14270/HTTP:用于接收 Jaeger Ingester 的健康檢查請求。           

Ingress

在k8s上搭建微服務鍊路追蹤,并将資料存儲到ES

展示效果

jaeger 的搜尋頁面是 Jaeger UI 的核心部分,它提供了豐富的功能以幫助您查詢、分析和可視化分布式追蹤資料。以下是 Jaeger 搜尋頁面的一些關鍵要素:

  1. 服務清單:顯示收集到的所有服務名稱。您可以從這個下拉清單中選擇要查詢的特定服務。
  2. 操作清單:在選擇服務後,此下拉清單将顯示與所選服務相關的所有操作。您可以選擇一個特定操作以限制搜尋範圍。
  3. 時間範圍:您可以選擇自定義的時間範圍或使用預定義的時間範圍,如最近1小時、最近2小時等,以限制查詢結果。
  4. 追蹤結果限制:您可以設定要在查詢結果中顯示的追蹤數量的上限。
  5. 搜尋條件:您可以添加多個搜尋條件(如标簽、最小/最大持續時間)以更精确地過濾查詢結果。
  6. 搜尋按鈕:單擊此按鈕以執行查詢。查詢結果将在下方的追蹤結果清單中顯示。
  7. 追蹤結果清單:顯示查詢結果。每個追蹤都以一個可折疊的條目形式展示,包含有關追蹤的基本資訊,如追蹤ID、開始時間、持續時間等。點選追蹤條目可展開詳細資訊,如追蹤的時間軸視圖和關聯的 span 資訊。
  8. 追蹤時間軸視圖:展示追蹤中各個 span 的執行順序和時間分布。這有助于識别潛在的性能瓶頸和錯誤。
  9. Span 詳情:展示有關單個 span 的詳細資訊,如操作名稱、持續時間、關聯服務、标簽和日志。

通過這些要素,Jaeger 搜尋頁面為您提供了一個直覺的方式來查詢和分析追蹤資料,進而幫助您診斷和解決分布式系統中的性能問題和錯誤。

在k8s上搭建微服務鍊路追蹤,并将資料存儲到ES

Jaeger 的追蹤頁面為分析分布式系統的性能和故障提供了豐富的資訊。它展示了一次完整的請求調用過程中各個服務及其互相互動的詳細情況。以下是追蹤頁面能為我們提供的幫助及如何進行分析:

  1. 識别性能瓶頸:通過觀察追蹤中各個 span 的執行順序和時間分布,我們可以識别出可能存在性能瓶頸的服務或操作。較長的 span 持續時間可能表明某個服務或操作的性能較差,需要進一步優化。
  2. 發現錯誤和異常:追蹤頁面展示了每個 span 的狀态,如成功或錯誤。我們可以通過檢視 span 的狀态和關聯日志來發現潛在的錯誤或異常,進而幫助我們快速定位問題。
  3. 了解服務依賴關系:追蹤頁面展示了各個服務之間的調用關系,幫助我們更好地了解系統的架構和服務依賴。這對于診斷潛在的依賴問題或設計優化非常有幫助。
  4. 分析請求路徑:通過檢視追蹤中的調用鍊,我們可以了解一次請求在分布式系統中的傳播過程。這有助于分析和優化請求路徑,以提高系統的整體性能。

分析追蹤頁面的方法:

  1. 檢查關鍵名額:首先觀察追蹤中的關鍵名額,如總持續時間、各個 span 的持續時間、成功與失敗的 span 數量等,以識别可能存在問題的區域。
  2. 深入研究問題區域:針對發現的問題區域,檢視 span 的詳細資訊、關聯日志和标簽,以擷取更多關于問題的上下文資訊。
  3. 檢視服務間互動:分析追蹤中的服務依賴關系,檢查服務間的調用是否符合預期,以及是否存在不必要的依賴或循環依賴。
  4. 優化和調整:根據分析結果,對系統進行優化和調整,如優化慢速服務、修複錯誤、優化請求路徑等。然後繼續監控和分析追蹤資料,以驗證優化效果。

通過仔細分析 Jaeger 的追蹤頁面,我們可以更好地了解分布式系統的性能、依賴關系和潛在問題,進而幫助我們診斷和解決問題,提高系統的整體穩定性和性能。

在k8s上搭建微服務鍊路追蹤,并将資料存儲到ES

Jaeger在ES中的存儲

Jaeger 在 Elasticsearch 中存儲了以下幾個主要的索引,它們用于存儲追蹤資料和相關資訊:

  1. jaeger-span-YYYY-MM-DD:這個索引用于存儲 span 資料,包括 span 的 ID、名稱、開始時間、持續時間、關聯的追蹤 ID、标簽等。這些資料是建構和分析完整追蹤資訊的基礎。
  2. jaeger-service-YYYY-MM-DD:這個索引用于存儲系統中出現的所有服務名稱。服務名稱在 Jaeger UI 中的服務下拉清單中顯示,用于篩選和查找特定服務的追蹤資料。
  3. jaeger-operation-YYYY-MM-DD:這個索引用于存儲系統中出現的所有操作名稱。操作名稱在 Jaeger UI 中的操作下拉清單中顯示,用于篩選和查找特定操作的追蹤資料。
  4. jaeger-dependencies-YYYY-MM-DD:這個索引用于存儲服務之間的依賴關系資訊。這些資料用于建構和顯示 Jaeger UI 中的依賴關系圖,幫助我們了解系統的架構和服務依賴。

這些索引的作用主要是存儲追蹤資料以及相關的中繼資料,使得 Jaeger 可以通過 UI 或 API 查詢、篩選和分析這些資料,進而幫助我們診斷分布式系統的性能問題和故障。通過對這些索引的資料進行實時監控和分析,我們可以更好地了解系統的運作狀況,并及時發現和解決潛在問題。

在k8s上搭建微服務鍊路追蹤,并将資料存儲到ES

繼續閱讀