前一篇介紹 Traces 是以一到多個 Spans 所組成,用來追蹤單次請求在系統內部的行為,幫助我們找出 Microservices 的故障原因。本篇會介紹好用的開源工具 Jaeger,並在 Istio 環境下學習如何蒐集 Tracing 資訊。
Jaeger 為 CNCF 開源專案,是一個 Tracing 平台,用來監控 microservices 相關的分散式系統,協助使用者排除故障,功能包含
Jaeger 能幫助我們蒐集 Application 的 Spans 資料並存入到資料庫,使用者就能透過 UI Query 所需 Tracing 資訊,藉此監控 Microservices 服務並進行分析及優化。
Jaeger 架構圖,圖片取至 jaegertracing.io
了解完 Jaeger 是什麼?接著就來實際使用看看吧!本篇參考 Istio Document - Jaegger,官方有提供 jaeger.yaml 可以快速安裝 Jaeger 實驗環境。
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.15/samples/addons/jaeger.yaml
Jaeger 會安裝到 istio-system
Namespace 上,可以檢查是否安裝成功,
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 狀態代表部署成功
kubectl port-forward -n istio-system svc/tracing 8084:80
http://127.0.0.1:8084
在瀏覽器即可看到 Jaeger 介面
接著就可以透過 Jaeger UI 查看 Application 的 Tracing 資訊,在 Query 之前要先打入一些流量到 Application。
kubectl port-forward svc/productpage 8080:9080&
while true; do curl -s 127.0.0.1:8080/productpage | grep reviews-v ; sleep 2; done
目前 Reviews 的流量延續 Day20 所做的設定,v1 與 v2 版本的流量比為 1:1。
Find Traces
Query 資料先查看擁有 4 Spans 的 Traces,此為 v1 版本 Request 蒐集到的資訊,可以看到經過哪些 Microservices 元件,也能看出每個元件處理請求所花費的時間。
搭配 Bookinfo 架構圖,就可以了解元件的溝通順序為何。
而 6 Spans 的 Traces 為 v2 版本 Request 蒐集到的資訊,v2 版本還會在多調用 Ratings 元件的功能。
從 Bookinfo 架構圖也能驗證 Microservices 的設計與蒐集到的 Traces 結果相符合。
DevOps 的精神在於讓開發者與維運人員在只專注自己工作情況下也能緊密合作,透過 Jaeger 蒐集 Tracing 資訊,讓維運人員不需要了解 Microservices 如何實作的情況下也能對應用程式進行分析及優化。