DevOps課程-Prometheus 6

建立自己的Alert Rule — Part I

ZONGRU Li
Oct 20, 2022

前面了解到了很多Out-of-boxAlert規則了

現在就要來建自己定義的Alert規則!

簡單設兩個規則目標:

  1. CPU使用率>50%的時候
  2. Pod無法start的時候

我先在我自己的課程目錄內建立新的目錄來存放這些要建置的Alert Rule

並且把Rule的檔案名稱取為:alert-rules.yaml

直接複製隨便一個Prometheus上的Alert Rule:

#首先把名稱name部分的值改為:
name: HostHighCpuLoad
#然後初步的判別式改為:
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 50

所以很明顯的metric數值項目就是"node_cpu_seconds_total"

其中它本身帶有的標籤mode部分會有很多種:

idle,lowait,irq,softing,steal,system,user…

其中有一個就是idle,簡單來說其意義就是CPU是在閒置的部分

而我們實際要看的是百分率的顯示,所以前後夾上rate[2m]

也就拿到閒置中的CPU百分比有多少!

再來我們要看的是每一台Worker有多少,所以再加上avg by(instance)

#現在變成:
(avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])))

然後想看看百分比,而不是小數點後的顯示,所以乘上100:

可以看到每台workerCPU都是9X%的在idle狀態

而現在我們想看到的是使用中的CPU,也就是100減去上述數值就是了!

也就是第一台有7%多的CPU是使用中,第二台只有4%多是使用中

再來我們要寫到Alert的判斷就是是否使用中的CPU有超過一半

所以用判別式:

#所以目前的PromQL為:
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 50

再來我們可能是希望等待2分鐘

若2分鐘仍然高過50%CPU使用率才觸發Alert,所以目前Alert Rule:

然後標示這是一個警告(warning)就好:

接著在annotation內有三個部分

#在description描述給上:
description: "CPU load on host is over 50%\n Vlaue = {{ $value }}\n"

原本還有runbook_url這邊就省去

#在summary部分給上:
summary: "Host CPU load high"

然後更完整的補完是哪一台worker instance:

順便給予這個Alert Rule更多標示的標籤:

所以目前完成以下

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet