4 PromQL

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

原文地址:https://www.cnblogs.com/lulin9501/p/15343238.html