DevOps課程-Prometheus 16
監控自己的應用程式(PART II),抓取自己的應用程式的Metrics(serviceMonitor元件撰寫),並設置其Grafana Dashboard
建立ServiceMonitor:
我們建立了自己應用程式本身暴露Prometheus可以接受的Metrics資料
接著就要讓Prometheus知道有這個新的Metrics資料需要收集
所以需要設置ServiceMonitor元件,用以通知Prometheus有一個新的Target:
首先撰寫ServiceMonitor元件設定檔在同一份k8s-config.yaml內,開頭:
接著填寫上有幾個重點:
1.對應的Endpoint的PORT對應到service元件的PORT,要用名子:
2.Prometheus要蒐集的Metrics的Pod,Service可能存在在不同Namespace
所以serviceMonitor元件要額外寫"namespaceSelector"來指定:
寫法一(全部nameSpace對應):
這邊我們用
寫法二(指定特定nameSpace):
3.serviceMonitor元件要抓到特定label的service的Metrics資訊
所以跟service元件對應pod一樣
serviceMonitor對應到service元件也要有selector指定:
所以以上三點其實都是在於serviceMonitor指定Endpoint
是如何指定到對的service元件的:
- service的PORT
- service所在的nameSpace
- 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:
在Prometheus的設定檔也會看到新增的serviceMonitor(只是名稱不太一樣):
既然已經能讓Prometheus接收到Metrics資訊了
接著就可以定義Alert Rule了,至於寫法方式前面就練習過了
後面接著直接刻Grafana Dashboard
建立Grafana Dashboard:
選擇簡單的panel:
來到這個畫面就可以開始刻Dashboard:
這時候先到Prometheus看到我們要顯示的Metrics資料:http_request_operations_total
大概長這樣:
我顯示兩小時的可以看到曲線變化:
這時候可以分析,我們比較會關心的
應該會是多少時間內,該網站被訪問的次數,比如每秒被請求多少次
所以使用rate,並且每兩分鐘區間統計一次:
所以假設我們就是要上面這樣的畫面呈現在Grafana上面
看看畫面沒問題的話就
這邊也可以調整一下Panel名稱:
這時候在去瀏覽貓咪網頁幾次刷F5:
接著可以再新增Panel,來看看每次請求花了多久時間:
一樣,這時候回Prometheus來看看我們要組什麼語法放到Grafana顯示
這個曲線只會一直增加:
用一樣方式計算每秒的請求花費的時間,並計算每2兩分鐘的曲線
把這個PromQL放到Grafana去使用:
完成如下:
例如:
以上課程相關檔案(kubectl,helm使用的檔案)
都放到最後的nodejs專案內加開的目錄:
另外建立了最後建置過程的各種語法整理:
課程相關的Repo: