06|PromQL有哪些常见的使用场景?
时序数据
- 深入了解
- 翻译
- 解释
- 总结
PromQL是Prometheus的查询语言,用于时序数据的查询和二次计算。它通过查询选择器和丰富的计算运算符实现数据筛选和计算。在向量匹配方面,PromQL提供了on和ignoring关键字来限制用于匹配的标签集,以及group_left和group_right来处理one-to-many和many-to-one的情况。此外,PromQL还支持聚合运算,如求平均值、排序和分组统计,以满足不同的数据分析需求。文章还重点介绍了PromQL的两个核心价值,一个是筛选,一个是计算。筛选是靠查询选择器,查询分为即时查询和范围查询。计算部分内容较多,有算术、比较、逻辑、聚合运算符,还有向量匹配逻辑,特别是group_left和group_right,比较难理解,需要仔细推敲。此外,文章还介绍了Prometheus中的函数,特别是increase和rate函数的使用方法和注意事项。总体而言,PromQL的灵活性和强大功能使得它在监控系统中具有重要作用,读者可以通过掌握其基础知识和核心功能,更好地利用Prometheus进行监控和分析。
《运维监控系统实战笔记》,新⼈⾸单¥59
全部留言(16)
- 最新
- 精选
- peter请问:注册用户100万的网站,适合用Prometheus吗?
作者回复: 跟注册用户没啥关系。一般只要有监控的需求都可以用,如果一个prometheus搞不定就使用一些分片扩展方案就可以了。今天可是除夕呀,还在学习👍👍👍
2023-01-21归属地:北京3 - Goalabsent(node_load1{instance=~".*"}) absent_over_time(node_load1{job="node-exporter"}[5m]) 传递给absent的任意一个时间序列有值,那么整体 absent() 就是为空; 至于答案,还没有想到好的解决方案
作者回复: 🤝
2023-01-28归属地:北京2 - Ppppppp关于标签问题,之前写代码踩过很多坑,一查promql一大堆 T.T 后来自己总结的就是所有很难发生变化的数据写标签,但是别什么乱七八糟的都加进去,只写和业务有关的;变化频繁的值写到measurement。
作者回复: 标签需要可枚举、稳态,否则就是灾难了
2023-03-05归属地:江苏21 - 那时刻思考题:通过参考了下absent文档,我的答案如下,烦请老师指正 如果我想对 100 台机器的 node_load1 做数据缺失告警,应该如何配置? count(node_load1 offset 1h) by (instance) unless count(node_load1} ) by (instance) absent不适合这个场景,因为absent表示指标的有无(存在与否)。
作者回复: 你这个思路不错👍🏻,一定程度上可以解决问题,只是在随着时间的推移,1h之后,虽然机器实际还是挂掉的,你这个策略会报恢复。不过确实已经很棒了👍🏻
2023-02-01归属地:北京1 - lei大年初一来过,祝大家新年快乐!
作者回复: 新年快乐
2023-01-22归属地:浙江1 - hshopeful另外由思考题想到一个场景:在 prometheus 体系下怎么做监控和配置告警来监控服务器挂掉的场景,希望老师能提供几种思路并说说每种思路的优缺点
作者回复: 一般有两个招,一个是看node-exporter是否up,一个是用ping监控各个机器
2023-01-20归属地:湖北1 - hshopeful思考题中:在没有其他 label 的情况下,直接在 prometheus 里面查询 absent(node_load1{}),得到的是 empty query result。在外面在封一层 absent 函数 absent(absent(node_load1{})),可以得到指标 {} 的值为 0,这种场景下面,即使在告警中配置 {} 值 为 0 的告警真的触发了,也不确定到底是哪个指标无数据触发的,所以感觉这个需求使用 absent 并不合适;那么我认为适合使用 absent 的场景是指标拥有的 labelsets 集合能够代表指标的时候。不知道说的对不对,麻烦老师指正下,谢谢!
作者回复: node_load1这个指标而言,一般会有一个instance=xx的标签来标识具体是哪个机器的:)
2023-01-20归属地:湖北1 - 金尚老师我一次性想查询多个指标怎么做。例如:服务器的带宽,上下行速率,丢包数等。
作者回复: 可以写正则,比如 {__name__=~"metric_name1|metric_name2|metric_name3"}
2023-06-30归属地:江苏 - Geek_51809f老师你好, 文中提到 irate 是拿时间范围内的最后两个值来做计算,这个怎么理解的?方便举例说明一下吗
作者回复: 比如10秒钟采集一个监控数据,1分钟内采集了6个点,如果使用 irate(xxx[1m])来计算的话,xxx[1m]可以拿到6个点,irate就是取这6个点中的最后两个点做计算
2023-03-21归属地:北京 - Geek_51809f老师你好!问一下 rate 是计算的每秒变化率? 还是每秒变化数量? 举例 :sum(rate(http_server_requests_seconds_count{application="$application", instance="$instance"}[1m])) 这个是表示 每秒http请求增长数量?还是每秒http请求增长率?
作者回复: 我们一般把每秒变化的数量称为变化率。所以本质是一个概念。
2023-03-20归属地:北京