Prometheus 提供了一种功能表达式语言 PromQL
,允许用户实时选择和汇聚时间序列数据。表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部系统通过 HTTP API 调用。
1 查询结果类型
- 瞬时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如:prometheus_http_requests_tota
- 区间数据 (Range vector): 包含一组时序,每个时序有多个点,例如:prometheus_http_requests_tota
[5m]
-
十分钟范围查询,支持d,m,y,ms等时间单位
prometheus_http_requests_total[10m]
偏移量,十分钟前
prometheus_http_requests_total offset 10m
偏移量,十分钟前,5分钟范围
prometheus_http_requests_total[5m] offset 10m
每间隔1分钟显示1个点
prometheus_http_requests_total[5m:1m]
-
- 纯量数据 (Scalar): 纯量只有一个数字,没有时序,例如:
count(prometheus_http_requests_tota)
2 正则匹配
prometheus_http_requests_total{code=~“40."} 取反正则匹配 prometheus_http_requests_total{code!~"40.”} 精确匹配 prometheus_http_requests_total{code=“400”} 取反匹配 prometheus_http_requests_total{code!=“400”}
3 四则运算
up ±*/ 5 up ^ 3 三次方 标签完全相同情况下,两个值可以直接运算 process_virtual_memory_max_bytes + process_virtual_memory_bytes 若标签不完全相同,可以取其中1个值运算,如取均有的 instance标签运算 node_cpu_precent + on(instance) node_cpu_total
4 比较运算
(> < >= <= !=)
返回大于100的值 prometheus_http_requests_total > 100 返回0/1 判断是否大于100 prometheus_http_requests_total > bool 100
5 聚合运算
count、sum、min、max、avg、topk(前k)、bottomk(后k),count_values(统计含有某个参数值的数量) #格式 <聚合函数>([parameter,] <指标查询语句>) [without|by ()] #参数 #1. "without"⽤于从计算结果中移除列举的标签,⽽保留其它标签 #2. “by” 则正好相反,结果向量中只保留列出的标签,其余标签则移除。 #通过without和by可以按照样本的问题对数据进⾏聚合。 #说明 其中只有 count_values , quantile , topk , bottomk ⽀持参数(parameter)。 top3和bottomk3 topk(3, prometheus_http_requests_total) bottomk(3, prometheus_http_requests_total) 统计含有gwm_uc标签所有值的数量 count_values(“gwm_uc”,gateway_requests_seconds_count) 计算5分钟内增长率 rate平滑/irate瞬时 rate(go_memstats_gc_cpu_fraction[5m])
6 子查询
avg_over_time() #指定间隔内所有点的平均值。
min_over_time() #指定间隔中所有点的最小值。
max_over_time() #指定间隔内所有点的最大值。
sum_over_time() #指定时间间隔内所有值的总和。
#查询一天空闲空间的平均值
avg_over_time(node_filesystem_files_free[1d])
max_over_time(rate(http_requests_total[5m])[1h:1m])
7 逻辑运算
and or unless