PromQL与SQL查询时序库常用案例

更新时间:2025-03-24 05:50:01

本文介绍利用PromQLSQL查询时序数据库的常见应用场景。

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筛选了clustersls-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])

多算子、函数嵌套使用

多算子/函数嵌套查询,例如下面的例子首先计算各resourcecluster维度下的最大值,再取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、instance172.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'
  • 本页导读 (1)
  • PromQL基础使用案例
  • 查询单指标数据
  • 按Label筛选指标数据
  • Label筛选使用正则匹配
  • 计算某指标各时间点最大值
  • 计算某指标时间线个数
  • 计算指标随时间的变化率
  • 计算指标相较前n分钟的差值
  • 多算子、函数嵌套使用
  • 多数值间计算
  • 指标与数值间计算
  • 多指标间二元计算
  • 如何正确使用Subquery
  • 使用SQL查询时序库案例
  • 查询指标下的所有原始数据
  • 查询指标中instance为待定值的原始数据
  • 使用SQL对时序数据做聚合计算创建定时SQL任务
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等