• Prometheus PromQL语法


    Prometheus PromQL语法

    一、PromQL语法

    1.1、什么是PromQL

    PromQL(Prometheus Query Language)是 Prometheus 自己开发的表达式语言,语言表现力很丰富,内置函数也很多。使用它可以对时序数据进行筛选和聚合。

    1.2、数据类型

    PromQL 表达式计算出来的值有以下几种类型:

    • 瞬时向量 (Instant vector): 一组时序,每个时序只有一个采样值
    • 区间向量 (Range vector): 一组时序,每个时序包含一段时间内的多个采样值
    • 标量数据 (Scalar): 一个浮点数
    • 字符串 (String): 一个字符串,暂时未用

    1.2.1、瞬时向量选择器

    瞬时向量选择器用来选择一组时序在某个采样点的采样值。最简单的情况就是指定一个度量指标,选择出所有属于该度量指标的时序的当前采样值。比如下面的表达式:

    apiserver_request_total
    

    image-20210712134316699

    可以通过在后面添加用大括号包围起来的一组标签键值对来对时序进行过滤。比如下面的表达式筛选出了 job 为 kubernetes-apiservers,并且 resource为 pod的时序:

    apiserver_request_total{job="kubernetes-apiserver",resource="pods"}
    

    匹配标签值时可以是等于,也可以使用正则表达式。总共有下面几种匹配操作符:

    =:完全相等
    !=: 不相等
    =~: 正则表达式匹配
    !~: 正则表达式不匹配
    
    # 下面的表达式筛选出了container是kube-scheduler或kube-proxy或kube-apiserver的时序数据
    container_processes{container=~"kube-scheduler|kube-proxy|kube-apiserver"}
    

    1.2.2、区间向量选择器

    区间向量选择器类似于瞬时向量选择器,不同的是它选择的是过去一段时间的采样值。可以通过在瞬时向量选择器后面添加包含在 [] 里的时长来得到区间向量选择器。比如下面的表达式选出了所有度量指标为apiserver_request_total且resource是pod的时序在过去1 分钟的采样值。

    # 这个不支持Graph,需要选择Console,才会看到采集的数据
    apiserver_request_total{job="kubernetes-apiserver",resource="pods"}[1m]
    

    image-20210712134643662

    说明:时长的单位可以是下面几种之一:

    s:seconds
    m:minutes
    h:hours
    d:days
    w:weeks
    y:years
    

    1.2.3、偏移向量选择器

    前面介绍的选择器默认都是以当前时间为基准时间,偏移修饰器用来调整基准时间,使其往前偏移一段时间。偏移修饰器紧跟在选择器后面,使用 offset 来指定要偏移的量。比如下面的表达式选择度量名称为apiserver_request_total的所有时序在 5 分钟前的采样值。

    apiserver_request_total{job="kubernetes-apiserver",resource="pods"} offset 5m
    

    下面的表达式选择apiserver_request_total 度量指标在 1 周前的这个时间点过去 5 分钟的采样值。

    apiserver_request_total{job="kubernetes-apiserver",resource="pods"} [5m] offset 1w
    

    1.2.4、聚合操作符

    PromQL 的聚合操作符用来将向量里的元素聚合得更少。总共有下面这些聚合操作符

    sum:求和
    min:最小值
    max:最大值
    avg:平均值
    stddev:标准差
    stdvar:方差
    count:元素个数
    count_values:等于某值的元素个数
    bottomk:最小的 k 个元素
    topk:最大的 k 个元素
    quantile:分位数
    

    1)计算k8s-master1节点所有容器总计内存:

    sum(container_memory_usage_bytes{instance=~"k8s-master1"})/1024/1024/1024
    

    image-20210712135354195

    2)计算k8s-master1节点最近1m所有容器cpu使用率

    sum (rate (container_cpu_usage_seconds_total{instance=~"k8s-master1"}[1m])) / sum (machine_cpu_cores{ instance =~"k8s-master1"}) * 100
    

    image-20210712135506317

    3)计算最近1m所有容器cpu使用率

    image-20210712135625557

    1.2.5、函数

    Prometheus 内置了一些函数来辅助计算,下面介绍一些典型的。

    abs():绝对值
    sqrt():平方根
    exp():指数计算
    ln():自然对数
    ceil():向上取整
    floor():向下取整
    round():四舍五入取整
    delta():计算区间向量里每一个时序第一个和最后一个的差值
    sort():排序
    
    作者:Lawrence

    -------------------------------------------

    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    [LeetCode82]Remove Duplicates from Sorted List II
    IOS开发常见BUG和一些小技巧(PS:耐心看完,很实用)
    IOS-一步一步教你自定义评分星级条RatingBar
    iOS手机淘宝加入购物车动画分析
    iOS mac终端下的SQL语句
    iOS SQLite 数据库迁移
    iOS 判断两个日期之间的间隔
    iOS应用架构谈 本地持久化方案及动态部署
    用 SQLite 和 FMDB 替代 Core Data
    ios 消除 字符串 首尾空格
  • 原文地址:https://www.cnblogs.com/hujinzhong/p/15001755.html
Copyright © 2020-2023  润新知