<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Prometheus 常用 PromQL 語句

          共 3189字,需瀏覽 7分鐘

           ·

          2020-07-28 17:34

          PromQL 是 Prometheus 提供的一個函數(shù)式的表達(dá)式語言,可以使用戶實時地查找和聚合時間序列數(shù)據(jù)。表達(dá)式計算結(jié)果可以在圖表中展示,也可以在 Prometheus表達(dá)式瀏覽器中以表格形式展示,或者作為數(shù)據(jù)源,以 HTTP API 的方式提供給外部系統(tǒng)使用。PromQL 雖然以 QL 結(jié)尾,但是它不是類似 SQL 的語言,因為在時間序列上執(zhí)行計算類型時,SQL 語言相對缺乏表達(dá)能力。而 PromQL 語言表達(dá)能力非常豐富,可以使用標(biāo)簽進(jìn)行任意聚合,還可以使用標(biāo)簽將不同的標(biāo)簽連接到一起進(jìn)行算術(shù)運(yùn)算操作。內(nèi)置了時間和數(shù)學(xué)等很多函數(shù)可以使用。

          然而 PromQL 也是大部分使用 Prometheus 的用戶的夢魘,壓根不知道如何去編寫,很多情況下都是參考別人的來編寫,假如自己去實現(xiàn)一個需求從0寫一條 PromQL 語句還是比較費(fèi)勁。這里我們就將一些常用的 PromQL 查詢方式進(jìn)行一些簡單的說明,希望對大家有所幫助。

          選擇序列

          選擇指定指標(biāo)名稱的序列最新樣本:

          my_metric_name

          選擇指定指標(biāo)名稱序列5分鐘的樣本范圍:

          my_metric_name[5m]

          篩選給定標(biāo)簽的序列:

          my_metric_name{label1="value1", label2="value2"}

          更復(fù)雜的標(biāo)簽匹配器:

          my_metric_name{label1!="value1", label2=~"regex1", label3!~"regex2"}

          匹配器:

          • =: 等于

          • !=: 不等于

          • =~: 正則匹配

          • !~: 正則不匹配

          Counter 的增長速率

          過去5分鐘每秒平均增長速率:

          rate(http_requests_total[5m])

          1分鐘時間窗口中最后兩個樣本計算的每秒增長速率:

          irate(http_requests_total[1m]

          過去1小時增加的絕對數(shù)值:

          increase(http_requests_total[1h])

          多個序列聚合

          對所有序列進(jìn)行求和:

          sum(my_metric_name)

          根據(jù)方法和路徑標(biāo)簽維度進(jìn)行求和:

          sum by(method, path) (my_metric_name)

          without 用于從計算結(jié)果中移除列舉的標(biāo)簽,而保留其它標(biāo)簽,by 則正好相反,結(jié)果向量中只保留列出的標(biāo)簽,其余標(biāo)簽則移除:

          sum without(method, path) (my_metric_name)

          其他常用的聚合運(yùn)算符:sum(), min(), max(), avg(), stddev(), stdvar(), count(), count_values(),bottomk(), topk(), quantile()。

          序列間的數(shù)學(xué)計算

          將兩個相同標(biāo)簽的序列相加:

          left_metric + right_metric

          只將匹配 instance 和 job 標(biāo)簽的序列相加:

          left_metric + on(instance, job) right_metric

          忽略匹配 instance 和 job 標(biāo)簽的序列相加:

          left_metric + ignoring(instance, job) right_metric

          多對一匹配模式:

          left_metric + on(instance, job) group_left right_metric

          在結(jié)果中包括一側(cè)(右側(cè))的 version 標(biāo)簽:

          left_metric + on(instance, job) group_left(version) right_metric

          集合操作

          包括任何左側(cè)或右側(cè)的標(biāo)簽集合:

          left_metric or right_metric

          包括任何同時存在于左側(cè)或右側(cè)的標(biāo)簽集:

          left_metric and right_metric

          包含任何左側(cè)的標(biāo)簽集合,但不包括右側(cè)的:

          left_metric unless right_metric

          只在某些標(biāo)簽上匹配:

          left_metric and on(job, instance) right_metric

          過濾

          只保留大于1024樣本值的序列:

          left_metric > 1024

          只保留左邊樣本值大于右邊樣本值的序列:

          left_metric > right_metric

          不過濾序列,而是比較序列,然后返回01

          left_metric > bool right_metric

          在某些匹配的標(biāo)簽上操作:

          left_metric > on(job, instance) right_metric

          其他常用的比較運(yùn)算符:==、!=、>、<、>=、≤。

          直方圖分位數(shù)

          過去5分鐘內(nèi),每個標(biāo)簽維度請求延遲的90%分位數(shù):

          histogram_quantile(0.9, rate(my_request_durations_seconds_bucket[5m]))

          只針對 method 和 path 維度的90%分位數(shù):

          histogram_quantile(  0.9,  sum by(le, path, method) (    rate(my_request_durations_seconds_bucket[5m])  ))

          Gauges 的變化

          過去一小時內(nèi)的絕對值變化:

          delta(my_gauge[1h])

          基于過去4小時的數(shù)據(jù)來預(yù)測1小時后的數(shù)據(jù):

          predict_linear(my_gauge[4h], 3600)

          時間

          獲取 Unix 時間,以秒為單位:

          time()

          獲取最后一次成功運(yùn)行的批處理作業(yè)的年齡:

          time() - my_batch_job_last_success_timestamp_seconds

          查找一小時內(nèi)沒有成功的批處理作業(yè):

          time() - my_batch_job_last_success_timestamp_seconds > 3600

          缺失數(shù)據(jù)處理

          當(dāng)輸入向量為空時,創(chuàng)建一個一個輸出序列:

          absent(my_metric_name)

          當(dāng)輸入的范圍向量5分鐘內(nèi)都是空的時候,創(chuàng)建一個空的輸出序列:

          absent_over_time(my_metric_name[5m])

          標(biāo)簽操作

          - 分隔符連接兩個標(biāo)簽的值:

          label_join(my_metric_name, "-", "label1", "label2")

          提取標(biāo)簽的一部分并將其存儲在新標(biāo)簽中:

          label_replace(my_metric, "dest-label", "$1", "source-label", "(.*):.*")

          關(guān)于 PromQL 更多的使用方法,可以參考 PromQL 官方文檔:

          • 基礎(chǔ):https://prometheus.io/docs/prometheus/latest/querying/basics/

          • 操作符:https://prometheus.io/docs/prometheus/latest/querying/operators/

          • 函數(shù):https://prometheus.io/docs/prometheus/latest/querying/functions/

          • 示例:https://prometheus.io/docs/prometheus/latest/querying/examples/

          此外還有一個比較友好的 PromQL Cheatsheet 文檔,如下所示:

          由于微信壓縮比較嚴(yán)重,如果你想要獲取原圖可以在公眾號中回復(fù) PromQL 關(guān)鍵字獲取高清 PDF 文檔。




          K8S進(jìn)階訓(xùn)練營,點(diǎn)擊下方圖片了解詳情

          瀏覽 100
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码高清免费视频 | 大香蕉午夜福利 | 国产无卡无码在线观看视频 | 一级大片在线播放 | av高清无码在线入口 |