运维监控系统实战笔记
秦晓辉
快猫星云联合创始人,Open-Falcon、Nightingale、Categraf 核心研发
9147 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
运维监控系统实战笔记
15
15
1.0x
00:00/00:00
登录|注册

06|PromQL有哪些常见的使用场景?

你好,我是秦晓辉。
上一讲我们介绍了 Prometheus 中的一些关键设计,比如注重标准和生态、监控目标动态发现机制、PromQL 等,其中 PromQL 是 Prometheus 的查询语言,使用起来非常灵活方便,但很多人不知道如何更好地利用它,发挥不出它的优势。所以这一讲我们就来梳理一下 PromQL 的典型应用场景。
PromQL 主要用于时序数据的查询和二次计算场景。我们先来回顾一下时序数据,在脑子里建立起时序数据的具象视图。

时序数据

我们可以把时序数据理解成一个以时间为轴的矩阵,你可以看一下我给出的例子,例子中有三个时间序列,在时间轴上分别对应不同的值。
^
│ . . . . . . . . . . node_load1{host="host01",zone="bj"}
│ . . . . . . . . . . node_load1{host="host02",zone="sh"}
│ . . . . . . . . . . node_load1{host="host11",zone="sh"}
v
<------- 时间 ---------->
每一个点称为一个样本(sample),样本由三部分组成。
指标(metric):metric name 和描述当前样本特征的 labelsets。
时间戳(timestamp):一个精确到毫秒的时间戳。
值(value):表示该时间样本的值。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

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
  • Goal
    absent(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归属地:江苏
    2
    1
  • 那时刻
    思考题:通过参考了下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归属地:北京
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部