DevOps課程-Prometheus 3
決定要監控哪些東西?
1.目的是啥?
2.想監控甚麼東西?
- >我們想注意到K8S Cluster中某個不尋常的事件發生
- >觀察到任何不尋常的事
可能是CPU的Spikes
Insufficient Storage
High Load
Unauthorized Request
當上述事件發生時,要立刻可以方便分析,並且立即反應並修復
可能是透過監控Node,或是透過監控Application
如何取得這些資訊?
所以除了監控很重要外,"方便觀察"監控的數據,也變得很重要!!!
可能在Node上取得CPU,Memory等數據
可能在Application上取得Request相關監控數據
或是監控Application的進出權限,而需要監控K8S的Components
簡單的解決方案就是 — Prometheus
Prometheus Web UI:
首先找到對應的Service元件:
可以看到他剛安裝只是ClusterIP,所以要能查看,先簡單做port-forward
#如上他是用PORT 9090,所以也forward到Node的9090:
kubectl port-forward {元件名稱} {執行kubectl指令本機PORT}:{這個元件PORT} -n monitoring#組出來的指令如下:
kubectl port-forward service/monitoring-kube-prometheus-prometheus 9090:9090 -n monitoring(上面執行也可以考慮在後面加入"&"變成背景執行)
查找當前Prometheus已經蒐集的目標Data:
展開第一個看到:
講師的畫面上kube-proxy是紅的,掛掉的狀態,可以方便快速地知道哪個掛了
而想到看到特定"Target"的實際哪些的"metrics"的內容(像是CPU,Request數量..etc),要回到首頁搜尋
或是
以上都是比較Low Level的Veiw,通常用來debug等等狀況使用
另外UI上甚至也可以看到Prometheus的設定檔:
以及Runtime info.:
其中特別注意到Prometheus的設定檔裡面定義了Jobs:
上述這堆Jobs就對應到:
其中我們可以定義:
instance = 單一個Endpoint抓取的所有資訊
Job = 針對某個相同目的的上述instances的集合
這邊可以看看Label:
我們可以透過複製以下這部分名稱:
在Prometheus的設定檔內找到對應的job:
在首頁,也就是搜尋頁上,比如查找apiserver資訊:
如上都能找到一樣的job="apiserver"的對應
一樣也可以透過上述條件過濾
然後如上面Target頁面我們有看到apiserver的部分
有兩個Endpoint(也就是兩個Instances)
上述也可以當作過濾條件來查找:
非常方便在debug方面使用(我看起來是專門找單點數據用!)
但不是非常的可視化,不容易看到anomalies(異常)
尤其是一些數值化的數據像是CPU使用超時等等
所以下一篇就是可視化的UI工具 — Grafana