欢迎访问linux宝典,请记住本站唯一域名:www.linuxbaodian.com

PromQL 分组与聚合函数

来源:原创    更新时间:2022-04-07 11:42:58    编辑:管理员    浏览:1983

我们知道 Prometheus 的时间序列数据是多维数据模型,我们经常就有根据各个维度进行汇总的需求。


基于标签聚合


例如我们想知道我们的 demo 服务每秒处理的请求数,那么可以将单个的速率相加就可以。

sum(rate(demo_api_request_duration_seconds_count{job="demo"}[5m]))

可以得到如下所示的结果:


但是我们可以看到绘制出来的图形没有保留任何标签维度,一般来说可能我们希望保留一些维度,例如,我们可能更希望计算每个 instance 和 path 的变化率,但并不关心单个 method 或者 status 的结果,这个时候我们可以在 sum() 聚合器中添加一个 without() 的修饰符:

sum without(method, status) (rate(demo_api_request_duration_seconds_count{job="demo"}[5m]))


PromQL 分组与聚合函数



最后同理apiserver也是一样的

sum by(verb)(rate(apiserver_request_duration_seconds_count[5m]))






这里的分组概念和 SQL 语句中的分组去聚合就非常类似了。

除了 sum() 之外,Prometheus 还支持下面的这些聚合器/聚合函数:(如果不加上by进行分组,那么计算的是整个时间序列的值,只是一个值而已,没有标签维度)






  • sum():对聚合分组中的所有值进行求和

  • min():获取一个聚合分组中最小值

  • max():获取一个聚合分组中最大值

  • avg():计算聚合分组中所有值的平均值

  • stddev():计算聚合分组中所有数值的标准差

  • stdvar():计算聚合分组中所有数值的标准方差

  • count():计算聚合分组中所有序列的总数    计算序列的总数,要和sum取分开

  • count_values():计算具有相同样本值的元素数量

  • bottomk(k, ...):计算按样本值计算的最小的 k 个元素

  • topk(k,...):计算最大的 k 个元素的样本值

  • quantile(φ,...):计算维度上的 φ-分位数(0≤φ≤1)

  • group(...):只是按标签分组,并将样本值设为 1。





练习:

1.按 job 分组聚合,计算我们正在监控的所有进程的总内存使用量(process_resident_memory_bytes 指标):

sum by(job) (process_resident_memory_bytes)

2.计算 demo_cpu_usage_seconds_total 指标有多少不同的 CPU 模式:

count (group by(mode) (demo_cpu_usage_seconds_total))

3.计算每个 job 任务和指标名称的时间序列数量:

count by (job, __name__) ({__name__ != ""})


上一篇:Zabbix 4.0LTS新功能 – 立即检查(Check Now)

下一篇:已经是最后一篇

评论区

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

相关内容

点击排行

随机新闻

评论排行榜