一焕数、安裝
打開https://prometheus.io/download/
解壓呛凶,打開解壓文件目錄葱弟,執(zhí)行./prometheus
打開以下網(wǎng)址ip:9090
下載node_explorter
解壓捣染,打開解壓文件目錄继控,執(zhí)行./node_explorter
編輯prometheus.yml
重啟prometheus,打開ip:9090
下載grafana, 圖形管理平臺
解壓嫉柴,進(jìn)入bin目錄厌杜,執(zhí)行./grafana-server
打開ip:3000,進(jìn)入平臺
設(shè)置數(shù)據(jù)源,新建圖表圖形模板
二夯尽、工作原理
Prometheus用于管理數(shù)據(jù)
node_explore用于收集產(chǎn)生數(shù)據(jù)瞧壮,可以有多個收集不同數(shù)據(jù)的插件
grafana用于將數(shù)據(jù)顯示出來
三、函數(shù)用法
irate(v range-vector)函數(shù), 輸入:范圍向量匙握,輸出:key: value = 度量指標(biāo): (last值-last前一個值)/時間戳差值咆槽。它是基于最后兩個數(shù)據(jù)點(diǎn),自動調(diào)整單調(diào)性圈纺, 如:服務(wù)實(shí)例重啟秦忿,則計(jì)數(shù)器重置。
下面表達(dá)式針對范圍向量中的每個時間序列數(shù)據(jù)蛾娶,返回兩個最新數(shù)據(jù)點(diǎn)過去5分鐘的HTTP請求速率灯谣。
irate(http_requests_total{job="api-server"}[5m])
sum(irate(node_disk_written_bytes_total{instance==""}[1m]))
sum(irate(node_disk_read_bytes_total{instance==""}[1m]))
increase函數(shù):該函數(shù)配合counter數(shù)據(jù)類型使用,獲取區(qū)間向量中的第一個和最后一個樣本并返回其增長量蛔琅。如果除以一定時間就可以獲取該時間內(nèi)的平均增長率increase(node_cpu[2m]) / 120?#主機(jī)節(jié)點(diǎn)最近兩分鐘內(nèi)的平均CPU使用率
rate()函數(shù):該函數(shù)配合counter類型數(shù)據(jù)使用胎许,取counter在這個時間段中的平均每秒增量。比如監(jiān)控網(wǎng)絡(luò)接受字節(jié)數(shù)的情況罗售,在9:10到9:20期間累計(jì)量增加了1000bytes辜窑,加入rate([1m])函數(shù)后就會使用1000除以60秒,計(jì)算出數(shù)據(jù)大約為16bytes寨躁。rate(node_cpu[2m])?#直接計(jì)算區(qū)間向量在時間窗口內(nèi)平均增長速率
sum函數(shù):在實(shí)際工作中CPU大多是多核的穆碎,而node_cpu會將每個核的數(shù)據(jù)都單獨(dú)顯示出來,我們其實(shí)不會關(guān)注每個核的單獨(dú)情況朽缎,而是關(guān)心總的CPU情況惨远。使用sum()函數(shù)進(jìn)行求和后可以得出一條總的數(shù)據(jù)谜悟,但sum()是將所有機(jī)器的數(shù)據(jù)都進(jìn)行了求和话肖,所以還要再使用by (instance)或者by (cluster_name)就可以取出單個服務(wù)器或者一組服務(wù)器的CPU數(shù)據(jù)。上面的公式可以進(jìn)化為:sum( increase(node_cpu[1m]) )
count函數(shù):該函數(shù)用于進(jìn)行一些模糊判斷葡幸,比如有100臺服務(wù)器在監(jiān)控最筒,想實(shí)現(xiàn)當(dāng)CPU使用率大于80%的機(jī)器達(dá)到N臺就進(jìn)行報警就可以使用它
count(count_netstat_wait_connections >?200)
topk函數(shù):該函數(shù)可以從大量數(shù)據(jù)中取出排行前N的數(shù)值,N可以自定義蔚叨。比如監(jiān)控了100臺服務(wù)器的320個CPU床蜘,用這個函數(shù)就可以查看當(dāng)前負(fù)載較高的那幾個,用于報警
topk(3,count_netstat_wait_connections)? #Gauge類型
topk(3,,rate(node_network_receive_bytes[20m]))? #Counter類型
predict_linear函數(shù):對曲線變化速率進(jìn)行計(jì)算蔑水,起到一定的預(yù)測作用邢锯。比如當(dāng)前這1個小時的磁盤可用率急劇下降,這種情況可能導(dǎo)致磁盤很快被寫滿搀别,這時可以使用該函數(shù)丹擎,用當(dāng)前1小時的數(shù)據(jù)去預(yù)測未來幾個小時的狀態(tài),實(shí)現(xiàn)提前告警
predict_linear( node_filesystem_free_bytes{mountpoint="/"}[1h],4*3600?) <?0?#如果未來4小時后磁盤使用率為負(fù)數(shù)就會報
四、基礎(chǔ)數(shù)據(jù)獲取與分析
CPU
CPU使用率
(1-avg(irate(node_cpu_seconds_total{mode="idle",instance=""}[5m]))) * 100
監(jiān)控內(nèi)存RAM
總內(nèi)存大小
node_memory_MemTotal_bytes{instance=""}
可用內(nèi)存
node_memory_MemAvailable_bytes{instance=""}
Buffer緩存
node_memory_Buffers_bytes{instance=""}
Cached緩存
node_memory_Cached_bytes{instance=""}? + node_memory_Slab_bytes{instance=""}
空閑內(nèi)存
node_memory_MemFree{instance=""}
已用內(nèi)存
node_memory_MemTotal_bytes{instance=""}-node_memory_MemFree{instance=""}-node_memory_Cached_bytes{instance=""}
內(nèi)存使用率
1-((node_memory_MemFree{instance=""}+node_memory_Buffers_bytes{instance=""}+node_memory_Cached_bytes{instance=""})/?node_memory_MemTotal_bytes{instance=""})*100
磁盤性能分析(ROM)
磁盤的 IOPS蒂培,也就是在一秒內(nèi)再愈,磁盤進(jìn)行多少次 I/O 讀寫。單位 iops
sum by (instance) (irate(node_disk_reads_completed_total{instace=""}[1m])) / 60
sum by (instance) (irate(node_disk_writes_completed_total{instace=""}[1m])) / 60
sum by (instance) (irate(node_disk_reads_completed_total{instace=""}[1m])) / 60+sum by (instance) (irate(node_disk_writes_completed_total{instace=""}[1m])) / 60
磁盤的吞吐量护戳,也就是每秒磁盤 I/O 的流量翎冲,即磁盤寫入加上讀出的數(shù)據(jù)的大小,單位bytes
sum(irate(node_disk_read_bytes_total{instance=""}[1m]))/60
sum(irate(node_disk_written_bytes_total{instance=""}[1m]))/60
sum(irate(node_disk_read_bytes_total{instance=""}[1m]))/60+sum(irate(node_disk_written_bytes_total{instance=""}[1m]))/60
IO time 每個磁盤分區(qū)輸入/輸出操作花費(fèi)的秒數(shù)
sum(irate(node_disk_io_time_seconds_total{instance=""}[5m]))/60? ?#每秒磁盤讀寫花費(fèi)的秒數(shù)
total:總計(jì)物理內(nèi)存的大小。
Free:空閑內(nèi)存有多少媳荒。
Shared:多個進(jìn)程共享的內(nèi)存總額抗悍。
Buffers:表示buffers cache的內(nèi)存數(shù)量,一般對塊設(shè)備的讀寫才需要緩沖钳枕。
Cached:表示page cached的內(nèi)存數(shù)量檐春,一般作文件系統(tǒng)的cached,頻繁訪問的文件都會被? ? cached么伯。如果cached值較大疟暖,就說明cached文件數(shù)較多。如果此時IO中的bi比較小田柔,就? ? ? ? 說明文件系統(tǒng)效率比較好俐巴。
Slab:slab分配器不僅可以提供動態(tài)內(nèi)存的管理功能,而且可以作為經(jīng)常分配并釋放的內(nèi)存的緩存硬爆。
MemAvailable: Free + Buffers + Cached - 不可回收的部分欣舵。不可回收部分包括:共享內(nèi)存段,tmpfs缀磕,ramfs等缘圈。
網(wǎng)絡(luò)監(jiān)控
發(fā)送流量
sum(irate(node_network_transmit_bytes_total{instance=""}[1m]))
接收流量
sum(irate(node_network_receive_bytes_total{instance=""}[1m]))
五、測試腳本
test_io.py
test_memory.py