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