iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

前言

Day17 我們簡單介紹了 Prometheus 工具的架構以及用途,本篇就來實際操作看看,到底要如何部署以及使用 Prometheus。

安裝 Prometheus 到 Istio 環境

本篇參考 Querying Metrics from Prometheus 教學,若還沒準備好 Istio 的人可參考 Day10 - 準備 Istio 實驗環境,接著為了保持大家的環境統一,請先將前幾章建置的元件清除乾淨。

  1. 將安裝在 Default Namespace 的元件清除乾淨
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 讓我們可以快速建置環境。

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

此安裝檔作為示範, Performance 與 Security 功能並不完善,只適合在實驗環境使用

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

  1. 使用 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。

  1. 使用 kubectl port-forward 將流量轉到 Prometheus GUI
kubectl port-forward -n istio-system svc/prometheus 8081:9090 

將 127.0.0.1:8081 的流量轉到 prometheus:9090

  1. 在瀏覽器輸入網址連接至服務
http://127.0.0.1:8081/

在瀏覽器即可看到 Prometheus GUI 介面

https://ithelp.ithome.com.tw/upload/images/20220927/20139235NJRfSYDbaN.png

再來我們安裝 Bookinfo Application ,讓 Prometheus 可以蒐集此應用程式的 Metrics。

  1. 使用 kubectl apply -f <file> 部署 Bookinfo Application
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.15/samples/bookinfo/platform/kube/bookinfo.yaml

安裝完成後,嘗試看看是否能夠連接至頁面。

  1. 使用 kubectl port-forward 將本機流量轉移到 Productage
kubectl port-forward svc/productpage 8080:9080
  1. 使用 curl <url> 連接至 Productage 頁面
curl 127.0.0.1:8080

也可以在瀏覽器輸入網址查看

(輸出結果)

<!DOCTYPE html>
<html>
  <head>
    <title>Simple Bookstore App</title>
...
...
  </body>
</html>

有看到 Html 資料就代表成功部署

在 Prometheus 查詢 Metrics 資訊

安裝完 Prometheus 與 Bookinfo Application 後,Microservices 之間的流量會被 Sidecar 給紀錄, Prometheus 透過 Sidecar 蒐集 Metrics ,使用者就能透過 GUI 來 Query 需要的資料,接著我們就來實驗看看吧!

https://ithelp.ithome.com.tw/upload/images/20220927/20139235hlzvF1thI0.png

Prometheus 會蒐集 Application 的流量資料並儲存到自己的資料庫,讓使用者可以透過 GUI 獲取資訊。

  1. 重複執行 curl 指令將流量打入服務中,讓 Prometheus 蒐集 Metrics 資料
curl 127.0.0.1:8080

https://ithelp.ithome.com.tw/upload/images/20220927/20139235XJyCMDJf9G.png

  1. 到 Prometheus GUI 介面 -> 在搜尋欄輸入下列字串後點擊 Execute
istio_requests_total

https://ithelp.ithome.com.tw/upload/images/20220927/201392356uwwiJHi5d.png

istio_requests_total 為 Istio 預設的 Metrics,代表代理的請求數,可以在下方列表看到搜尋結果。

  1. 點擊 Graph,可以看到有時間軸的圖表紀錄

https://ithelp.ithome.com.tw/upload/images/20220927/20139235apM8skO8Pd.png

從圖表中可以看出前一時刻有流量進入。

Prometheus Query 有介紹 PromQL 語言有各種 Query 的方式,接著我們嘗試用更多條件搜尋資料

  1. 到 Prometheus GUI 介面 -> 在搜尋欄輸入下列字串後點擊 Execute
istio_requests_total{destination_service="reviews.default.svc.cluster.local", destination_version="v3"}

https://ithelp.ithome.com.tw/upload/images/20220927/20139235h9v8gPN73p.png

搜尋 istio_requests_total 的 Reviews v3 版本資料

PromQL 還能在 Query 字串帶入時間條件,以及利用 Functions 回傳運算好的紀錄。

  1. 到 Prometheus GUI 介面 -> 在搜尋欄輸入下列字串後點擊 Execute
rate(istio_requests_total{destination_service=~"reviews.default.svc.cluster.local", response_code="200"}[5m])

https://ithelp.ithome.com.tw/upload/images/20220927/20139235La449bXGt8.png

搜尋 istio_requests_total 的 Reviews 元件 5 分鐘內被使用到的平均值

總結

本篇學習了如何利用 PromQL 語法在 Prometheus 查詢資料,但若應用程式真的出問題了,還要自己搜尋 Metrics 資料顯得很沒效率,所以後幾篇將會介紹結合 Prometheus 的 GUI 工具,幫助我們實際提升應用程式的 Observability。


上一篇
Day17 - 輕鬆管理 Metrics 的工具,Prometheus 介紹
下一篇
Day19 - 在 Istio 使用 Kiali 提升 Observability
系列文
學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言