參考文檔:https://blog.csdn.net/qq_35753140/article/details/105121525
--------------
cpu使用率
--------------
100 * (1 - sum by (instance)(increase(node_cpu_seconds_total{mode="idle"}[5m])) /
sum by (instance)(increase(node_cpu_seconds_total[5m])))
會將所有主機的CPU使用率顯示在一個panel中
以下是對參考文檔的一些備注說明:



增加increase函數,查看效果:

其實increase的作用是:用這12個數據點中的最后一個數據點1563.56減去第一個數據點1508.76,
即得到這個范圍內的增量。
也就是上圖中增加increase后的效果。
這里的數據只是做一個演示,主要是為了講解原理和規則,不要去糾結數據的正確性。
回到計算CPU使用率的場景中來:
increase(node_cpu_seconds_total{cpu="0",mode="idle"}[5m])
node_cpu_seconds_total表示的是:系統自開機以來,cpu的總時間(單位秒)
{cpu="0"}表示的是:第一個CPU
{mode="idle"}表示的是:CPU的mode為idle
[5m]表示的是5分鍾的區間
increase表示增量
13:00 系統啟動
13:45 采集的數據為13000
13:50 采集的數據為13567 (現在)
[5m] 就表示 13:45 ~ 13:50
increase 就表示 13:45 ~ 13:50 之間的增量 即 567
cpu0 5分鍾內處於空閑狀態的時間占比
increase(node_cpu_seconds_total{cpu="0",mode="idle"}[5m]) /
increase(node_cpu_seconds_total{cpu="0"}[5m])
針對CPU0,在這5分鍾內,處於idle狀態的時間增量為 20秒(紅色)
針對CPU0,在這5分鍾內,總時間增量(user + sys + idle + irq + iowait + nice + softirq + steal) 為500秒(黑色)
則這5分鍾內,百分比為 20 / 500 = 4%,即:處於空閑狀態的時間占比為4%。
一個服務器可能有4顆CPU,上面計算了1個CPU的,現在我們計算所有CPU的(沒有用cpu="0"這樣的字眼來過濾):
sum(increase(node_cpu_seconds_total{mode="idle"}[5m])) / sum (increase(node_cpu_seconds_total[5m]))
increase(node_cpu_seconds_total{cpu="0", mode="idle"}[5m]) CPU0在這5分鍾的增量 20
increase(node_cpu_seconds_total{cpu="1", mode="idle"}[5m]) CPU1在這5分鍾的增量 30
increase(node_cpu_seconds_total{cpu="2", mode="idle"}[5m]) CPU2在這5分鍾的增量 40
increase(node_cpu_seconds_total{cpu="3", mode="idle"}[5m]) CPU3在這5分鍾的增量 70
sum()的作用就是計算總和 :20 + 30 + 40 + 70 = 160
即:所有CPU在這5分鍾內,處於idle狀態的總時間。
increase(node_cpu_seconds_total{cpu="0"}[5m]) CPU0在這5分鍾的增量 1000
increase(node_cpu_seconds_total{cpu="1"}[5m]) CPU0在這5分鍾的增量 1200
increase(node_cpu_seconds_total{cpu="2"}[5m]) CPU0在這5分鍾的增量 1300
increase(node_cpu_seconds_total{cpu="3"}[5m]) CPU0在這5分鍾的增量 1500
sum() 計算總和 1000 + 1200 + 1300 + 1500 = 5000
即:所有CPU在這5分鍾內,總的時間增量。
即:160 / 5000 = 3.2% (0.032),這就是空閑率。
那么CPU使用率 = 1 - 空閑率 = 1 - 3.2% = 96.8%
以上就計算出了一台主機的CPU使用率。
==========================================================================
注意:假設我們在配置文件中只配置了一台主機,才能使用上面的計算方式。(比如下圖)

如果你的配置文件中配置了多台主機,則上面的計算方式不對。(比如下圖)

如果要監控多台主機,則需要注意用instance來區分。
increase(node_cpu_seconds_total{cpu="0", mode="idle", instance="localhost:8080"}[5m]) 1000 \
increase(node_cpu_seconds_total{cpu="1", mode="idle", instance="localhost:8080"}[5m]) 1200 |
increase(node_cpu_seconds_total{cpu="2", mode="idle", instance="localhost:8080"}[5m]) 1300 | 一組
increase(node_cpu_seconds_total{cpu="3", mode="idle", instance="localhost:8080"}[5m]) 1500 /
increase(node_cpu_seconds_total{cpu="0", mode="idle", instance="localhost:8081"}[5m]) 1000 \
increase(node_cpu_seconds_total{cpu="1", mode="idle", instance="localhost:8081"}[5m]) 1200 |
increase(node_cpu_seconds_total{cpu="2", mode="idle", instance="localhost:8081"}[5m]) 1300 | 一組
increase(node_cpu_seconds_total{cpu="3", mode="idle", instance="localhost:8081"}[5m]) 1500 /
sum by (instance) (increase(node_cpu_seconds_total{mode="idle"}[5m]))
按主機分組(即按instance)進行求和
上述表達式會得出2個值

increase(node_cpu_seconds_total{cpu="0", instance="localhost:8080"}[5m]) 5分鍾的增量 1000
increase(node_cpu_seconds_total{cpu="1", instance="localhost:8080"}[5m]) 5分鍾的增量 1200
increase(node_cpu_seconds_total{cpu="2", instance="localhost:8080"}[5m]) 5分鍾的增量 1300
increase(node_cpu_seconds_total{cpu="3", instance="localhost:8080"}[5m]) 5分鍾的增量 1500
increase(node_cpu_seconds_total{cpu="0", instance="localhost:8081"}[5m]) 5分鍾的增量 1000
increase(node_cpu_seconds_total{cpu="1", instance="localhost:8081"}[5m]) 5分鍾的增量 1200
increase(node_cpu_seconds_total{cpu="2", instance="localhost:8081"}[5m]) 5分鍾的增量 1300
increase(node_cpu_seconds_total{cpu="3", instance="localhost:8081"}[5m]) 5分鍾的增量 1500
sum by (instance) (increase(node_cpu_seconds_total[5m]))
按主機分組(即按instance)進行求和
上述表達式會得出2個值

sum by (instance)(increase(node_cpu_seconds_total{mode="idle"}[5m])) /
sum by (instance)(increase(node_cpu_seconds_total[5m]))
這也會得到2個值,用instance區分

