DevOps課程-Prometheus 16

監控自己的應用程式(PART II),抓取自己的應用程式的Metrics(serviceMonitor元件撰寫),並設置其Grafana Dashboard

ZONGRU Li
Oct 31, 2022

建立ServiceMonitor:

我們建立了自己應用程式本身暴露Prometheus可以接受的Metrics資料

接著就要讓Prometheus知道有這個新的Metrics資料需要收集

所以需要設置ServiceMonitor元件,用以通知Prometheus有一個新的Target:

首先撰寫ServiceMonitor元件設定檔在同一份k8s-config.yaml內,開頭:

接著填寫上有幾個重點:

1.對應的EndpointPORT對應到service元件的PORT,要用名子:

2.Prometheus要蒐集的MetricsPod,Service可能存在在不同Namespace

所以serviceMonitor元件要額外寫"namespaceSelector"來指定:

寫法一(全部nameSpace對應):

這邊我們用

寫法二(指定特定nameSpace):

3.serviceMonitor元件要抓到特定labelserviceMetrics資訊

所以跟service元件對應pod一樣

serviceMonitor對應到service元件也要有selector指定:

所以以上三點其實都是在於serviceMonitor指定Endpoint

是如何指定到對的service元件的:

  1. service的PORT
  2. service所在的nameSpace
  3. service本身標籤對應

這邊快速來看到Prometheus Web上的Target現在有哪些:

接著建立以上寫好的serviceMonitor

如果前面service的PORT沒有名子也要一起apply

(因為我這邊是全部砍掉重建,所以三個元件一次重作)

#執行以下指令建立元件:
kubectl apply -f k8s-config.yaml

大概三四分鐘後刷新Prometheus Web看到:

一兩分鐘後刷新看到紅紅的

放完上面這張圖再去刷新就變藍了

(我猜是剛建立,還沒蒐集到Metrics所以是紅的):

到首頁搜尋"http_request_operations_total"也能看到:

直接搜尋下去可以看到數值:

這時候可以刷新一下Nodejs的頁面:

localhost:3000/metrics也會看到數字:

然後過一陣子再次到Prometheus搜尋看到:

接著我們可以在"localhost:3000"狂按F5刷新多次後,再去看Prometheus:

變28次

Prometheus的設定檔也會看到新增的serviceMonitor(只是名稱不太一樣):

既然已經能讓Prometheus接收到Metrics資訊了

接著就可以定義Alert Rule了,至於寫法方式前面就練習過了

後面接著直接刻Grafana Dashboard

建立Grafana Dashboard:

選擇簡單的panel:

來到這個畫面就可以開始刻Dashboard:

這時候先到Prometheus看到我們要顯示的Metrics資料:http_request_operations_total

大概長這樣:

我顯示兩小時的可以看到曲線變化:

這時候可以分析,我們比較會關心的

應該會是多少時間內,該網站被訪問的次數,比如每秒被請求多少次

所以使用rate,並且每兩分鐘區間統計一次:

如圖0.247(次/秒)*120秒大概就是29次

所以假設我們就是要上面這樣的畫面呈現在Grafana上面

看看畫面沒問題的話就

這邊也可以調整一下Panel名稱:

這時候在去瀏覽貓咪網頁幾次刷F5:

這邊狂按F5刷新
右上刷新

接著可以再新增Panel,來看看每次請求花了多久時間:

一樣,這時候回Prometheus來看看我們要組什麼語法放到Grafana顯示

這個曲線只會一直增加:

用一樣方式計算每秒的請求花費的時間,並計算每2兩分鐘的曲線

把這個PromQL放到Grafana去使用:

完成如下:

例如:

以上課程相關檔案(kubectl,helm使用的檔案)

都放到最後的nodejs專案內加開的目錄:

另外建立了最後建置過程的各種語法整理:

課程相關的Repo:

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet