亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Prometheus語(yǔ)法初探

概述
Prometheus是一套使用Go語(yǔ)言進(jìn)行編寫的監(jiān)控工具,專注于基礎(chǔ)監(jiān)控,默認(rèn)僅保留15天的監(jiān)控?cái)?shù)據(jù),15天的監(jiān)控?cái)?shù)據(jù),已經(jīng)足夠運(yùn)維人員去排查和分析運(yùn)維故障。Prometheus有專門的PQL語(yǔ)言,可以對(duì)采集上來的指標(biāo)進(jìn)行多維度、函數(shù)分析,具有高度的指標(biāo)定制化能力。本文將同大家一起學(xué)習(xí)Prometheus的PQL語(yǔ)法,驗(yàn)證并記錄下過程。
PQL重要概念
即時(shí)向量
一個(gè)時(shí)間點(diǎn)某指標(biāo)的值,如:
Prometheus語(yǔ)法初探
Prometheus語(yǔ)法初探
區(qū)間向量
指的是在某段時(shí)間內(nèi)metric的取值,每個(gè)時(shí)間點(diǎn)都包含一系列的值,如:Prometheus語(yǔ)法初探
Prometheus語(yǔ)法初探
指標(biāo)類型
  • Gauge,度量值,這個(gè)值是有變化的,如CPU使用率,有高有低
  • Counter,累計(jì)值,從程序開始,只增不減,如開機(jī)運(yùn)行時(shí)長(zhǎng)
標(biāo)簽
一個(gè)指標(biāo),可以包括多個(gè)標(biāo)簽(label),用來指示這個(gè)指標(biāo)的具體表示信息,起到對(duì)一個(gè)指標(biāo)的修飾作用,標(biāo)簽可使用正則表達(dá)式進(jìn)行匹配。
如node_cpu_seconds_total指標(biāo),直接查詢?cè)撝笜?biāo),會(huì)打印出該指標(biāo)的全部標(biāo)簽數(shù)據(jù)。
Prometheus語(yǔ)法初探
拿關(guān)系型數(shù)據(jù)比較,可以這么類似比喻,node_cpu_seconds_total為表,cpu,instance,job,mode,value為其字段,表數(shù)據(jù)總為最新的數(shù)據(jù),數(shù)據(jù)量總數(shù)等于各個(gè)字段的枚舉值相乘。
當(dāng)我們給這個(gè)Metric指標(biāo)做了標(biāo)簽過濾時(shí),相當(dāng)于執(zhí)行了where限制性語(yǔ)句,如node_cpu_seconds_total{mode="idle"},只過濾出包含mode字段,并且其值為idle,類似于SQL語(yǔ)句。
Prometheus語(yǔ)法初探
標(biāo)簽支持正則表達(dá)式,使用=~(Rexp),如node_cpu_seconds_total{mode=\~"idle|iowait"},類似于SQL語(yǔ)句。
Prometheus語(yǔ)法初探
標(biāo)簽過濾器可以有多個(gè),用逗號(hào)進(jìn)行隔開,相當(dāng)于執(zhí)行了where … and … 語(yǔ)句,如node_cpu_seconds_total{mode="idle",cpu='0'},類似于SQL語(yǔ)句。Prometheus語(yǔ)法初探
配合標(biāo)簽,我們可以精確的找到我們需要用于展示或者計(jì)算的指標(biāo)值。
偏移量offset
指標(biāo)通過偏移量offset關(guān)鍵字,可以查詢相對(duì)于當(dāng)前時(shí)間點(diǎn)之前的數(shù)據(jù),默認(rèn)獲取當(dāng)前最新數(shù)據(jù),如node_cpu_seconds_total offset 5m,獲取5分鐘前該指標(biāo)的數(shù)據(jù)。
注釋
PQL使用"#"對(duì)語(yǔ)法進(jìn)行注釋。
函數(shù)
sum
  • sum函數(shù)可以對(duì)瞬時(shí)向量進(jìn)行求和,如sum(node_cpu_seconds_total),將統(tǒng)計(jì)所有值的總和。類似于select sum(value) from node_cpu_seconds_total
  • sum后面可以加 by 關(guān)鍵字,表示通過那個(gè)維度進(jìn)行數(shù)據(jù)統(tǒng)計(jì)求和,如sum by (mode) (node_cpu_seconds_total) 類似于 select sum(vaule) from node_cpu_seconds_total group by mode
min
  • min函數(shù)可以對(duì)瞬時(shí)向量進(jìn)行求最小值,min(node_cpu_seconds_total)。類似于select min(value) from node_cpu_seconds_total
  • 同樣,也支持by關(guān)鍵字,進(jìn)行某個(gè)維度的求最小值
max
  • max函數(shù)可以對(duì)瞬時(shí)向量進(jìn)行求最大值,max(node_cpu_seconds_total)。類似于select max(value) from node_cpu_seconds_total
  • 同樣,也支持by關(guān)鍵字,進(jìn)行某個(gè)維度的求最大值
avg
  • avg函數(shù)可以對(duì)瞬時(shí)向量進(jìn)行求平均avg(node_cpu_seconds_total)。類似于select avg(value) from node_cpu_seconds_total
  • 同樣,也支持by關(guān)鍵字,進(jìn)行某個(gè)維度的求最均值
count
  • count函數(shù)可以對(duì)瞬時(shí)向量個(gè)數(shù)求總數(shù),如count(node_cpu_seconds_total)類似于select count(*) from node_cpu_seconds_total
  • 同樣,也支持by關(guān)鍵字,進(jìn)行某個(gè)維度的求最總個(gè)數(shù)
topk
  • topk函數(shù)可以對(duì)瞬時(shí)向量的值從大到小進(jìn)行排列,并獲取前N個(gè)值,需要傳入兩個(gè)參數(shù),一個(gè)是N,一個(gè)是指標(biāo),如topk(5,node_cpu_seconds_total),類似于select * from (select * from node_cpu_seconds_total order by value desc) where rownum<=5
  • 同樣,也支持by關(guān)鍵字,進(jìn)行某個(gè)維度進(jìn)行計(jì)算
bottomk
  • 同topk相反,這里不再贅述。
計(jì)算
+ 加法運(yùn)算
  • 指標(biāo)支持加法運(yùn)算,一個(gè)即時(shí)向量,由于標(biāo)簽值不一致,所以會(huì)有多個(gè)值,這些值可以跟另外一個(gè)即時(shí)向量進(jìn)行相加,這里的相加要保持一個(gè)原則,那就是需要具有同一個(gè)標(biāo)簽值的才會(huì)相加。node_cpu_seconds_total + node_cpu_seconds_total,這相當(dāng)于所有值都多加一個(gè)原來的值,總體的值的數(shù)量是保持不變的。
  • 相加的兩個(gè)瞬時(shí)向量個(gè)數(shù)不一致情況:node_cpu_seconds_total和node_cpu_seconds_total{mode="idle"},后者經(jīng)過過濾后,數(shù)量上明顯比第一個(gè)少,此時(shí)輸出的結(jié)果個(gè)數(shù)同過濾后數(shù)量少的個(gè)數(shù)一致。
  • 兩個(gè)即時(shí)向量都不具備有同樣的標(biāo)簽值情況:如node_cpu_seconds_total + node_memory_Active_bytes,此時(shí)由于沒有任何一個(gè)值具有相同的標(biāo)簽值,所以結(jié)果為nodata,此時(shí)我們可以用ignoring關(guān)鍵字,對(duì)標(biāo)簽值進(jìn)行忽略,使他們可以進(jìn)行相加。由于node_cpu_seconds_total比node_memory_Active_bytes多了cpu和mode標(biāo)簽,所以node_cpu_seconds_total數(shù)量個(gè)數(shù)一般大于node_memory_Active_bytes個(gè)數(shù),所以需要使用group_left,node_cpu_seconds_total + ignoring(cpu,mode) group_left node_memory_Active_bytes,結(jié)果集以左邊的node_cpu_seconds_total個(gè)數(shù)為準(zhǔn),如果加號(hào)兩個(gè)即時(shí)向量位置相反,則可以使用group_right,如node_memory_Active_bytes + ignoring(cpu,mode) group_right node_cpu_seconds_total
- 減法運(yùn)算
  • 類似加法運(yùn)算
*?乘法運(yùn)算
  • 類似加法運(yùn)算
/ 除法運(yùn)算
  • 類似加法運(yùn)算
邏輯比較
== 判斷是否相等
  • ==用于判斷左右兩邊的值是否相等,如果相等則為1(true),如果不等則為0(false),如node_cpu_seconds_total ==BOOL 0 判斷是否有存在0值
!= 判斷是否不等
  • 類似==
>= 大于等于
  • >=用于判斷左邊的值是否大于或等于右邊的值,如果滿足,則為1(true),如果不滿足則為0(false)
<=小于等于
  • 類似大于等于
> 大于
  • 類似大于等于
< 小于
  • 類似大于等于
數(shù)據(jù)集操作
and
  • 對(duì)多個(gè)指標(biāo)的數(shù)據(jù)集進(jìn)行標(biāo)簽判斷,獲取兩個(gè)指標(biāo)集具有共同的標(biāo)簽的值node_cpu_seconds_total and node_cpu_guest_seconds_total,類似sql select * from node_cpu_seconds_total a,node_cpu_guest_seconds_total b where a.cpu = b.cpu and a.instance = b.instance and a.job=b.job and a.mode = b.mode
or
  • 對(duì)多個(gè)指標(biāo)集數(shù)據(jù)進(jìn)行展示,如果有標(biāo)簽重復(fù),則僅顯示其中一個(gè)標(biāo)簽的值。
unless
  • 對(duì)多個(gè)指標(biāo)的數(shù)據(jù)集進(jìn)行標(biāo)簽判斷,獲取兩個(gè)指標(biāo)集不具有共同的標(biāo)簽的值,結(jié)果集以最左邊為準(zhǔn),如node_memory_Active_bytes unless node_cpu_seconds_total和node_cpu_seconds_total unless node_memory_Active_bytes結(jié)果是不一樣的。
函數(shù)
用于即時(shí)向量的函數(shù)
abs
  • abs返回即時(shí)向量的絕對(duì)值
absent
  • absent用于檢測(cè)即時(shí)向量中,某個(gè)標(biāo)簽是否存在,如果不存在,則value為1,如檢查標(biāo)簽為node_arp_entries{instance=“l(fā)ocalhost:9100”}是否存在有元素,如果存在則返回nodata,如果不存在value則為1
  • 常用于檢測(cè)指標(biāo)是否丟失。
ceil
  • 用于將浮點(diǎn)數(shù)向上化為最接近的一個(gè)整數(shù),如值為0.1,則為向上取整,成為1。
floor
  • 用于將浮點(diǎn)數(shù)向下化為最接近的一個(gè)整數(shù),如值為0.1,則為向下取整,成為0。
clamp_max
  • 該函數(shù)需要兩個(gè)參數(shù),一個(gè)是向量,另外一個(gè)是封頂值,如果一個(gè)向量的值超過該封頂值,該向量的值則為封頂值。
clamp_min
該函數(shù)需要兩個(gè)參數(shù),一個(gè)是向量,另外一個(gè)是觸底值,如果一個(gè)向量的值超過該觸底值,該向量的值則為觸底值。
用于區(qū)間向量的函數(shù)
區(qū)間向量的函數(shù)執(zhí)行完成后,便成為了即時(shí)向量。
absent_over_time
  • absent_over_time用于檢測(cè)在給定的區(qū)間向量中,是否存在有元素,如果沒有則value為1。
changes
  • 返回給定的區(qū)間向量中,對(duì)比于當(dāng)前值,發(fā)生變化的元素的數(shù)量。
delta
  • 返回區(qū)間向量中,第一個(gè)元素和最后一個(gè)元素之間的變化值,時(shí)間區(qū)間也參與算法計(jì)算,所以即時(shí)第一個(gè)元素和最后一個(gè)元素均為整數(shù),該值也未必是整數(shù)。
  • 須作用在gauge類型的指標(biāo)
deriv
  • 返回區(qū)間向量中,滿足線性規(guī)律的每秒變化值
  • 須作用在gauge類型的指標(biāo)
idelta
  • 該函數(shù)計(jì)算區(qū)間向量間,最后兩個(gè)元素的差值,如果區(qū)間內(nèi)沒有兩個(gè)元素,則返回nodata
  • 須作用在gauge類型的指標(biāo)
irate
  • 該函數(shù)計(jì)算區(qū)間向量間,最后兩個(gè)元素的差值,并且除以區(qū)間的秒數(shù),如果區(qū)間內(nèi)沒有兩個(gè)元素,則返回nodata。
<aggregation>_over_time
  • 該函數(shù)技術(shù)按區(qū)間向量的最大(max)、最?。╩in)、平均(avg)、求和(sum)、求總數(shù)()等匯聚值。
原文鏈接:https://blog.csdn.net/xiaojinran/article/details/112398797

文章轉(zhuǎn)載:?分布式實(shí)驗(yàn)室
(版權(quán)歸原作者所有,侵刪)

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!