iT邦幫忙

2022 iThome 鐵人賽

DAY 24
1

前言

前一篇介紹 Traces 是以一到多個 Spans 所組成,用來追蹤單次請求在系統內部的行為,幫助我們找出 Microservices 的故障原因。本篇會介紹好用的開源工具 Jaeger,並在 Istio 環境下學習如何蒐集 Tracing 資訊。

Jaeger 介紹

https://ithelp.ithome.com.tw/upload/images/20221003/20139235cKGpE2tpLN.png

Jaeger 為 CNCF 開源專案,是一個 Tracing 平台,用來監控 microservices 相關的分散式系統,協助使用者排除故障,功能包含

  • 分散式資料傳播 (Distributed context propagation)
  • 分散式事務監控 (Distributed transaction monitoring)
  • 根本原因分析 (Root cause analysis)
  • 服務依賴性分析 (Service dependency analysis)
  • 效能/延遲優化 (Performance / latency optimization)

Jaeger 能幫助我們蒐集 Application 的 Spans 資料並存入到資料庫,使用者就能透過 UI Query 所需 Tracing 資訊,藉此監控 Microservices 服務並進行分析及優化。

https://ithelp.ithome.com.tw/upload/images/20221003/201392352sMPMc0xW1.png

Jaeger 架構圖,圖片取至 jaegertracing.io

安裝 Jaeger 到 Istio 環境

了解完 Jaeger 是什麼?接著就來實際使用看看吧!本篇參考 Istio Document - Jaegger,官方有提供 jaeger.yaml 可以快速安裝 Jaeger 實驗環境。

  1. 使用 jaeger.yaml 安裝 Jaeger 元件
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.15/samples/addons/jaeger.yaml

Jaeger 會安裝到 istio-system Namespace 上,可以檢查是否安裝成功,

  1. 使用 kubectl get pods -n <namespace> 查看 Pods 運行狀況
kubectl get pods -n istio-system

(輸出結果)

NAME                                   READY   STATUS    RESTARTS   AGE
grafana-96dd4774d-ftvm5                1/1     Running   0          2d13h
istio-ingressgateway-d54ff84fc-fpts7   1/1     Running   0          18d
istiod-68df67c57b-krrdx                1/1     Running   0          18d
jaeger-5994d55ffc-gpgh9                1/1     Running   0          26s
kiali-575f548888-grcxs                 1/1     Running   0          4d13h
prometheus-6549d6bdcc-kxgsj            2/2     Running   0          5d17h

確定 Jaeger 的 Pod 呈現 Running 狀態代表部署成功

  1. 使用 kubectl port-forward 將流量轉入到 Jaeger UI
kubectl port-forward -n istio-system svc/tracing 8084:80 
  1. 在瀏覽器輸入網址連接至服務
http://127.0.0.1:8084

https://ithelp.ithome.com.tw/upload/images/20221003/20139235EuR3ZbeSDW.png

在瀏覽器即可看到 Jaeger 介面

在 Jaeger UI 查看 Tracing 紀錄

接著就可以透過 Jaeger UI 查看 Application 的 Tracing 資訊,在 Query 之前要先打入一些流量到 Application。

  1. 將本機流量轉入 Bookinfo 應用程式,並每兩秒打入一次流量。
kubectl port-forward svc/productpage 8080:9080&
while true; do curl -s 127.0.0.1:8080/productpage | grep reviews-v ; sleep 2; done

https://ithelp.ithome.com.tw/upload/images/20221003/20139235N5kaV0l91Z.png

目前 Reviews 的流量延續 Day20 所做的設定,v1 與 v2 版本的流量比為 1:1。

  1. 在 Jaeger 輸入以下資訊,並點擊 Find Traces Query 資料
  • Service:productage.default
  • Limit Requests:20

https://ithelp.ithome.com.tw/upload/images/20221003/20139235RDr7hr6g5m.png

  1. 分別點擊 4 Spans 和 6 Spans 的 Traces 紀錄

https://ithelp.ithome.com.tw/upload/images/20221003/201392358JbGu2ZdMr.png

先查看擁有 4 Spans 的 Traces,此為 v1 版本 Request 蒐集到的資訊,可以看到經過哪些 Microservices 元件,也能看出每個元件處理請求所花費的時間。

https://ithelp.ithome.com.tw/upload/images/20221003/20139235QqeTT7grKN.png

搭配 Bookinfo 架構圖,就可以了解元件的溝通順序為何。

https://ithelp.ithome.com.tw/upload/images/20221003/20139235PsFDXBqsHz.png

而 6 Spans 的 Traces 為 v2 版本 Request 蒐集到的資訊,v2 版本還會在多調用 Ratings 元件的功能。

https://ithelp.ithome.com.tw/upload/images/20221003/20139235Mnv7MpYyPb.png

從 Bookinfo 架構圖也能驗證 Microservices 的設計與蒐集到的 Traces 結果相符合。

https://ithelp.ithome.com.tw/upload/images/20221003/20139235ctL5HBGTSx.png

總結

DevOps 的精神在於讓開發者與維運人員在只專注自己工作情況下也能緊密合作,透過 Jaeger 蒐集 Tracing 資訊,讓維運人員不需要了解 Microservices 如何實作的情況下也能對應用程式進行分析及優化。


上一篇
Day23 - Distributed Tracing 介紹,在 Istio 如何實現?
下一篇
Day25 - 保障 Microservices 安全性,Istio Security 介紹
系列文
學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言