全部產品
Search
文件中心

Simple Log Service:PromQL與SQL查詢時序庫常用案例

更新時間:Mar 25, 2025

本文介紹利用PromQL或SQL查詢時序資料庫的常見應用情境。

PromQL基礎使用案例

查詢單指標資料

process_resident_memory_bytes表示常駐記憶體,使用下面的PromQL可直接查看進程各時間的指標資料。

process_resident_memory_bytes

按Label篩選指標資料

PromQL語句支援在指標後面添加特定Label的篩選條件,以過濾出預期的指標資料,例如下面這個query篩選出了指定cluster下的資料。

process_resident_memory_bytes{cluster="sls-mall"}/1024/1024

Label篩選使用正則匹配

Label的篩選條件支援使用正則文法,例如下面的query篩選了cluster為sls-mall或者sls-demo的指標資料。

process_resident_memory_bytes{cluster=~"sls-mall|sls-demo"}

計算某指標各時間點最大值

查詢各cluster中堆記憶體使用量的最大值(max運算元)。

max by (cluster) (go_memstats_heap_inuse_bytes) / 1024 / 1024

計算某指標時間軸個數

查詢某個指標的時間軸條數(count運算元)。

count(apiserver_request_total{cluster="sls-mall"})

計算指標隨時間的變動率

rate函數用於計算指標在區間內的變動率,常用於計算CPU使用率。

rate(process_cpu_seconds_total[1m])

計算指標相較前n分鐘的差值

查詢指標各時刻相較於一分鐘的增量值。

delta(go_goroutines[1m])

多運算元、函數嵌套使用

多運算元/函數巢狀查詢,例如下面的例子首先計算各resource和cluster維度下的最大值,再取top3的數值。

topk(3, max by (cluster, resource)(apiserver_request_total))

多數值間計算

PromQL支援純數值之間的計算,包括+-*/%等運算。

1 + 2

指標與數值間計算

PromQL支援指標與數值間計算,例如下面的query表示將記憶體指標的byte單位轉換為MB。

process_resident_memory_bytes / 1024 / 1024

多指標間二元計算

PromQL支援在多指標間的計算,例如下面兩個指標相除。

kube_daemonset_status_number_ready{job="kube-state-metrics"} 
/ 
kube_daemonset_status_desired_number_scheduled{job="kube-state-metrics"}

如何正確使用Subquery

rate、delta、increase、{agg}_over_time等函數僅支援在原指標上進行操作,不支援在運算元或函數的結果集上進行計算,例如:

  • 支援以下形式。

    max_over_time(go_goroutines[1m]), 表示計算各時間軸前一分鐘指標內的最大值
  • 不支援以下形式。

    max_over_time(max(go_goroutines)[1m]), 此運算式意圖先計算各時間軸間的最大值,再從中選取前一分鐘內的最大值。
  • 正確使用。

    # prometheus提供了Subquery以支援上述需求,PromQL語句需改成以下形式:
    max_over_time(max(go_goroutines)[1m:10s])
    # Subquery中[a:b]的兩個參數分別表示range和step。

使用SQL查詢時序庫案例

查詢指標下的所有未經處理資料

查詢process_resident_memory_bytes指標在指定時間區間內的所有原始時序資料。(調試

 *| SELECT * FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes'

查詢指標中instance為待定值的未經處理資料

查詢指定指標為process_resident_memory_bytes、instance為172.20.0.143:8084的所有指標資料。(調試

*| SELECT * FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes' and element_at(__labels__, 'instance')='172.20.0.143:8084' limit all

使用SQL對時序資料做彙總計算建立定時SQL任務

將時間對齊到每分鐘做一次MAX彙總計算,使用SQL計算不同instance下的指標最大值。(調試

*| SELECT __time_nano__ FROM "metrics_store_name.prom" WHERE __name__ = 'process_resident_memory_bytes' and element_at(__labels__, 'instance')='x-abcd'