DevOps課程-Prometheus 8

建立自己的Alert Rule — Part III

ZONGRU Li
7 min readOct 24, 2022

因為我課程沒上時都會移除整座Cluster,這篇順便整理建置的指令

#建立Cluster:
eksctl create cluster
#取得目前現有哪些Cluster及其名稱:
eksctl get cluster
#對應課程結束移除(課上完才跑):
eksctl delete cluster --name {cluster名稱}
#這邊建置直接使用default的namespace建立要觀察的微服務系統:
kubectl apply -f config-best-practices.yaml
#安裝指令整理,增加Repo位置(如果本機沒做過的話):
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
#更新Repo內容(如果本機沒做過的話):
helm repo update
#建立Prometheus專用的namespace:
kubectl create namespace monitoring
#安裝Prometheus Chart,並給予名稱為monitoring,並安裝到monitoring ns裡面:
helm install {名稱,這邊一樣給monitoring} {Repo名稱}/{chart名稱,叫kube-prometheus-stack} -n {指定的namespace}
#整理上述對應的指令即如下(大概10分鐘),有時候久了會清cache,要重做上面update:
helm install monitoring prometheus-community/kube-prometheus-stack -n monitoring
#將Prometheus Web UI服務可以透過本機連通,把本機對應PORT往前推到遠端服務:
kubectl port-forward {元件名稱} {執行kubectl指令本機PORT}:{這個元件PORT} -n monitoring &
#上面Prometheus Web UI使用PORT是9090,所以組出來的指令類似:
kubectl port-forward service/monitoring-kube-prometheus-prometheus 9090:9090 -n monitoring &
#上述執行後即可訪問本機127.0.0.1:9090 會自動導到遠端Prometheus Web#同理Grafana的Web UI:
kubectl port-forward service/monitoring-grafana 8080:80 -n monitoring &
#上述執行後,可以瀏覽127.0.0.1:8080,預設帳密是admin/prom-operator
#透過kubectl工具建立寫好的Alert Rule(檔案內已經有寫指定的namespace了):
kubectl apply -f alert-rules.yaml
#確認現有Alert Rule方式:
kubectl get PrometheusRule -n monitoring
#查看建立Alert Rule的過程,指定到Container:
kubectl logs prometheus-monitoring-kube-prometheus-prometheus-0 -n monitoring -c config-reloader
#另一個主要Container的log也有建立Alert Rule的log可以看:
kubectl logs prometheus-monitoring-kube-prometheus-prometheus-0 -n monitoring -c prometheus

接下來目標是:

首先先來到GrafanaUI,看到以下的Dashboard:

前面Grafana UI有用簡單的方式造成小小流量

不過那不足以觸發自建的Alert(CPU使用量>50%)

下面會直接地佈署一個會造成CPU使用量飆升的

dockerhub內查找 →cpustress:

這個image已經很久沒有變了:

底下文件也很簡略,並且文件說明是docker run的方式

#這時候拿到的執行方式是:
bash docker run -it --name cpustress --rm containerstack/cpustress --cpu 4 --timeout 30s --metrics-brief

這邊我們就用pod形式執行地佈署上述image

所以要先改造成kubectl的執行方式

原本:

逐一改造成kubectl可執行的pod:

#得到的指令:
kubectl run cpu-test --image=docker.io/containerstack/cpustress -- --cpu 4 --timeout 30s --metrics-brief

然後當下還沒看到spike,但是數值的確變高了:

後來沒多久它就不行了

仔細看文件知道後面option是用掉多少core,持續30秒

#我改用以下方式跑,從30秒改成跑2分鐘:
kubectl run cpu-test --image=docker.io/containerstack/cpustress -- --cpu 4 --timeout 120s --metrics-brief

馬上看到明顯的變化:

新建的CPU>50% Alert條件也進入到Pending狀態(因為有設2分鐘的限制)

過一陣子

接著移除該pod後:

大概過一兩分鐘再去Prometheus Web上面看,就變回綠色了

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet