日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

腾讯面试题 Prometheus-PQL

發(fā)布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腾讯面试题 Prometheus-PQL 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述
Prometheus是一套使用go語言進行編寫的監(jiān)控工具,專注于基礎監(jiān)控,默認僅保留15天的監(jiān)控數(shù)據(jù),15天的監(jiān)控數(shù)據(jù),已經(jīng)足夠運維人員去排查和分析運維故障。
Prometheus有專門的PQL語言,可以對采集上來的指標進行多維度、函數(shù)分析,具有高度的指標定制化能力。
本文將同大家一起學習Prometheus的PQL語法,驗證并記錄下過程
PQL重要概念
即時向量
一個時間點某指標的值,如
node_cpu_seconds_total{mode=“idle”}
在這里插入圖片描述

區(qū)間向量
指的是在某段時間內(nèi)metric的取值,每個時間點都包含一系列的值

node_cpu_seconds_total{mode=“idle”}[5m]
在這里插入圖片描述

指標類型
Gauge
度量值,這個值是有變化的,如CPU使用率,有高有低
Counter
累計值,從程序開始,只增不減,如開機運行時長
標簽
一個指標,可以包括多個標簽(label),用來指示這個指標的具體表示信息,起到對一個指標的修飾作用,標簽可使用正則表達式進行匹配。
如node_cpu_seconds_total 指標,直接查詢該指標,會打印出該指標的全部標簽數(shù)據(jù)。
-在這里插入圖片描述
拿關(guān)系型數(shù)據(jù)比較,可以這么類似比喻
node_cpu_seconds_total為表,cpu,instance,job,mode,value為其字段,表數(shù)據(jù)總為最新的數(shù)據(jù),數(shù)據(jù)量總數(shù)等于各個字段的枚舉值相乘。

當我們給這個metric指標做了標簽過濾時,相當于執(zhí)行了where限制性語句,如node_cpu_seconds_total{mode=“idle”},只過濾出包含mode字段,并且其值為idle,類似于sql語句
select * from node_cpu_seconds_total where mode = ‘idle’
標簽支持正則表達式,使用=~(Rexp),如node_cpu_seconds_total{mode=~“idle|iowait”},類似于sql語句
select * from node_cpu_seconds_total where mode = ‘idle’ or mode = ‘iowait’
標簽過濾器可以有多個,用逗號進行隔開,相當于執(zhí)行了where … and … 語句,如node_cpu_seconds_total{mode=“idle”,cpu=‘0’},類似于sql語句
select * from node_cpu_seconds_total where mode = ‘idle’ and cpu = ‘0’
配合標簽,我們可以精確的找到我們需要用于展示或者計算的指標值
偏移量offset
指標通過偏移量offset關(guān)鍵字,可以查詢相對于當前時間點之前的數(shù)據(jù),默認獲取當前最新數(shù)據(jù),如node_cpu_seconds_total offset 5m,獲取5分鐘前該指標的數(shù)據(jù)。
注釋
PQL使用"#"對語法進行注釋
函數(shù)
sum
sum函數(shù)可以對瞬時向量進行求和,如sum(node_cpu_seconds_total),將統(tǒng)計所有值的總和。類似于select sum(value) from node_cpu_seconds_total
sum 后面可以加 by 關(guān)鍵字,表示通過那個維度進行數(shù)據(jù)統(tǒng)計求和,如sum by (mode) (node_cpu_seconds_total) 類似于 select sum(vaule) from node_cpu_seconds_total group by mode
min
min函數(shù)可以對瞬時向量進行求最小值,min(node_cpu_seconds_total) 。類似于select min(value) from node_cpu_seconds_total
同樣,也支持by關(guān)鍵字,進行某個維度的求最小值
max
max函數(shù)可以對瞬時向量進行求最大值,max(node_cpu_seconds_total) 。類似于select max(value) from node_cpu_seconds_total
同樣,也支持by關(guān)鍵字,進行某個維度的求最大值
avg
avg函數(shù)可以對瞬時向量進行求平均avg(node_cpu_seconds_total)。類似于select avg(value) from node_cpu_seconds_total
同樣,也支持by關(guān)鍵字,進行某個維度的求最均值
count
count函數(shù)可以對瞬時向量個數(shù)求總數(shù),如count(node_cpu_seconds_total)類似于select count(*) from node_cpu_seconds_total
同樣,也支持by關(guān)鍵字,進行某個維度的求最總個數(shù)
topk
topk函數(shù)可以對瞬時向量的值從大到小進行排列,并獲取前N個值,需要傳入兩個參數(shù),一個是N,一個是指標,如topk(5,node_cpu_seconds_total),類似于select * from (select * from node_cpu_seconds_total order by value desc) where rownum<=5
同樣,也支持by關(guān)鍵字,進行某個維度進行計算
bottomk
同topk相反,這里不再贅述。
計算

  • 加法運算
    指標支持加法運算,一個即時向量,由于標簽值不一致,所以會有多個值,這些值可以跟另外一個即時向量進行相加,這里的相加要保持一個原則,那就是需要具有同一個標簽值的才會相加。node_cpu_seconds_total + node_cpu_seconds_total,這相當于所有值都多加一個原來的值,總體的值的數(shù)量是保持不變的。
    相加的兩個瞬時向量個數(shù)不一致情況:node_cpu_seconds_total和node_cpu_seconds_total{mode=“idle”},后者經(jīng)過過濾后,數(shù)量上明顯比第一個少,此時輸出的結(jié)果個數(shù)同過濾后數(shù)量少的個數(shù)一致。
    兩個即時向量都不具備有同樣的標簽值情況:如node_cpu_seconds_total + node_memory_Active_bytes,此時由于沒有任何一個值具有相同的標簽值,所以結(jié)果為nodata,此時我們可以用ignoring關(guān)鍵字,對標簽值進行忽略,使他們可以進行相加。由于node_cpu_seconds_total比node_memory_Active_bytes多了cpu和mode標簽,所以node_cpu_seconds_total數(shù)量個數(shù)一般大于node_memory_Active_bytes個數(shù),所以需要使用group_left,node_cpu_seconds_total + ignoring(cpu,mode) group_left node_memory_Active_bytes,結(jié)果集以左邊的node_cpu_seconds_total個數(shù)為準,如果加號兩個即時向量位置相反,則可以使用group_right,如node_memory_Active_bytes + ignoring(cpu,mode) group_right node_cpu_seconds_total
  • 減法運算
    類似加法運算
  • 乘法運算
    類似加法運算
    / 除法運算
    類似加法運算
    邏輯比較
    == 判斷是否相等
    ==用于判斷左右兩邊的值是否相等,如果相等則為1(true),如果不等則為0(false),如node_cpu_seconds_total BOOL 0 判斷是否有存在0值
    != 判斷是否不等
    類似

= 大于等于
=用于判斷左邊的值是否大于或等于右邊的值,如果滿足,則為1(true),如果不滿足則為0(false)

<=小于等于
類似大于等于

大于
類似大于等于
< 小于
類似大于等于
數(shù)據(jù)集操作
and
對多個指標的數(shù)據(jù)集進行標簽判斷,獲取兩個指標集具有共同的標簽的值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
對多個指標集數(shù)據(jù)進行展示,如果有標簽重復,則僅顯示其中一個標簽的值
unless
對多個指標的數(shù)據(jù)集進行標簽判斷,獲取兩個指標集不具有共同的標簽的值,結(jié)果集以最左邊為準,如 node_memory_Active_bytes unless node_cpu_seconds_total 和 node_cpu_seconds_total unless node_memory_Active_bytes結(jié)果是不一樣的。
函數(shù)
用于即時向量的函數(shù)
abs
abs返回即時向量的絕對值
absent
absent用于檢測即時向量中,某個標簽是否存在,如果不存在,則value為1,如檢查標簽為node_arp_entries{instance=“l(fā)ocalhost:9100”}是否存在有元素,如果存在則返回nodata,如果不存在value則為1
常用于檢測指標是否丟失。
ceil
用于將浮點數(shù)向上化為最接近的一個整數(shù),如值為0.1,則為向上取整,成為1。
floor
用于將浮點數(shù)向下化為最接近的一個整數(shù),如值為0.1,則為向下取整,成為0。
clamp_max
該函數(shù)需要兩個參數(shù),一個是向量,另外一個是封頂值,如果一個向量的值超過該封頂值,該向量的值則為封頂值。
clamp_min
該函數(shù)需要兩個參數(shù),一個是向量,另外一個是觸底值,如果一個向量的值超過該觸底值,該向量的值則為觸底值。
用于區(qū)間向量的函數(shù)
區(qū)間向量的函數(shù)執(zhí)行完成后,便成為了即時向量
absent_over_time
absent_over_time用于檢測在給定的區(qū)間向量中,是否存在有元素,如果沒有則value為1。
changes
返回給定的區(qū)間向量中,對比于當前值,發(fā)生變化的元素的數(shù)量
delta
返回區(qū)間向量中,第一個元素和最后一個元素之間的變化值,時間區(qū)間也參與算法計算,所以即時第一個元素和最后一個元素均為整數(shù),該值也未必是整數(shù)。
須作用在gauge類型的指標
deriv
返回區(qū)間向量中,滿足線性規(guī)律的每秒變化值
須作用在gauge類型的指標
idelta
該函數(shù)計算區(qū)間向量間,最后兩個元素的差值,如果區(qū)間內(nèi)沒有兩個元素,則返回nodata
須作用在gauge類型的指標
irate
該函數(shù)計算區(qū)間向量間,最后兩個元素的差值,并且除以區(qū)間的秒數(shù),如果區(qū)間內(nèi)沒有兩個元素,則返回nodata
_over_time
該函數(shù)技術(shù)按區(qū)間向量的最大(max)、最小(min)、平均(avg)、求和(sum)、求總數(shù)()等匯聚值。

總結(jié)

以上是生活随笔為你收集整理的腾讯面试题 Prometheus-PQL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。