在 Day17 我們簡單介紹了 Prometheus 工具的架構以及用途,本篇就來實際操作看看,到底要如何部署以及使用 Prometheus。
本篇參考 Querying Metrics from Prometheus 教學,若還沒準備好 Istio 的人可參考 Day10 - 準備 Istio 實驗環境,接著為了保持大家的環境統一,請先將前幾章建置的元件清除乾淨。
kubectl delete --all deployment
kubectl delete --all service
kubectl delete --all serviceaccount
kubectl delete --all virtualservice
kubectl delete --all gateway
kubectl delete --all destinationrule
接著就可以安裝 Prometheus 了, Istio 提供了prometheus.yaml 讓我們可以快速建置環境。
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.15/samples/addons/prometheus.yaml
此安裝檔作為示範, Performance 與 Security 功能並不完善,只適合在實驗環境使用
Prometheus 會安裝到 istio-system
Namespace 上,可以檢查是否安裝成功。
kubectl get pods -n <namespace>
查看 Pods 運行狀況kubectl get pods -n istio-system
(輸出結果)
NAME READY STATUS RESTARTS AGE
istio-ingressgateway-d54ff84fc-fpts7 1/1 Running 0 12d
istiod-68df67c57b-krrdx 1/1 Running 0 12d
prometheus-6549d6bdcc-qr4k6 2/2 Running 0 2m29s
除了 istiod 與 istio-ingressgateway 等 Istio 元件之外還多了 prometheus 的 Pod
部署完成後就可以嘗試連接到 Prometheus GUI。
kubectl port-forward
將流量轉到 Prometheus GUIkubectl port-forward -n istio-system svc/prometheus 8081:9090
將 127.0.0.1:8081 的流量轉到 prometheus:9090
http://127.0.0.1:8081/
在瀏覽器即可看到 Prometheus GUI 介面
再來我們安裝 Bookinfo Application ,讓 Prometheus 可以蒐集此應用程式的 Metrics。
kubectl apply -f <file>
部署 Bookinfo Application
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.15/samples/bookinfo/platform/kube/bookinfo.yaml
安裝完成後,嘗試看看是否能夠連接至頁面。
kubectl port-forward
將本機流量轉移到 Productagekubectl port-forward svc/productpage 8080:9080
curl <url>
連接至 Productage 頁面curl 127.0.0.1:8080
也可以在瀏覽器輸入網址查看
(輸出結果)
<!DOCTYPE html>
<html>
<head>
<title>Simple Bookstore App</title>
...
...
</body>
</html>
有看到 Html 資料就代表成功部署
安裝完 Prometheus 與 Bookinfo Application 後,Microservices 之間的流量會被 Sidecar 給紀錄, Prometheus 透過 Sidecar 蒐集 Metrics ,使用者就能透過 GUI 來 Query 需要的資料,接著我們就來實驗看看吧!
Prometheus 會蒐集 Application 的流量資料並儲存到自己的資料庫,讓使用者可以透過 GUI 獲取資訊。
curl 127.0.0.1:8080
istio_requests_total
istio_requests_total 為 Istio 預設的 Metrics,代表代理的請求數,可以在下方列表看到搜尋結果。
從圖表中可以看出前一時刻有流量進入。
在 Prometheus Query 有介紹 PromQL 語言有各種 Query 的方式,接著我們嘗試用更多條件搜尋資料
istio_requests_total{destination_service="reviews.default.svc.cluster.local", destination_version="v3"}
搜尋 istio_requests_total 的 Reviews v3 版本資料
PromQL 還能在 Query 字串帶入時間條件,以及利用 Functions 回傳運算好的紀錄。
rate(istio_requests_total{destination_service=~"reviews.default.svc.cluster.local", response_code="200"}[5m])
搜尋 istio_requests_total 的 Reviews 元件 5 分鐘內被使用到的平均值
本篇學習了如何利用 PromQL 語法在 Prometheus 查詢資料,但若應用程式真的出問題了,還要自己搜尋 Metrics 資料顯得很沒效率,所以後幾篇將會介紹結合 Prometheus 的 GUI 工具,幫助我們實際提升應用程式的 Observability。