• PromQL基础语法(下)-聚合运算符、内置函数【prometheus查询语句】


    文章目录

    4. 聚合运算符

    - 操作符

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

    - 示例(sum)

    sum(system_disk_bytes_total{ ident="10.10.239.52"})/1024/1024/1024
    
    • 1

    有图有真相
    在这里插入图片描述

    - 示例(min/max)

    max(system_disk_bytes_total{ ident="10.10.239.52"})
    
    • 1

    有图有真相

    在这里插入图片描述

    - 示例(count_values)

    count_values("value",system_mem_total)
    
    • 1

    有图有真相
    在这里插入图片描述

    - 示例(bottomk | topk

    bottomk(5,system_mem_used)
    
    • 1

    有图有真相
    在这里插入图片描述

    5. 内置函数

    5.1 取整

    - ceil() 向上取整

    • 语法
    ceil(v instant-vector)
    
    • 1
    • 语法示例
    ceil(system_mem_used_percent{ident="10.10.239.31"})
    
    • 1

    - floor() 向下取整

    • 语法
    floor(v instant-vector)
    
    • 1
    • 语法示例
    floor(system_mem_used_percent{ident="10.10.239.31"})
    
    • 1

    - round() 四舍五入

    • 语法
    round(v instant-vector, to_nearest=1 scalar)
    
    • 1
    • 语法示例
    round(system_mem_used_percent{ident="10.10.239.31"})
    
    • 1

    5.2 限定范围

    - clamp() 限定取值范围

    说明:在范围内的值被取出,在范围外取范围边界值。

    • 语法
    clamp(v instant-vector, min scalar, max scalar)
    
    • 1
    • 语法示例
    clamp(system_mem_used_percent{ident="10.10.239.31"},4,10)
    
    • 1

    完整示例:

    • 原有值
    system_mem_used_percent{ident="10.10.239.31"}
    
    • 1

    结果输出

    system_mem_used_percent{ident="10.10.239.31"}               5.226927972811279
    
    • 1
    • 如果值在给出范围内
    clamp(system_mem_used_percent{ident="10.10.239.31"},4,10)
    
    • 1

    结果输出

    {ident="10.10.239.31"}       								5.232399234516268
    
    • 1
    • 如果值在给出范围外
    clamp(system_mem_used_percent{ident="10.10.239.31"},7,10)
    
    • 1

    结果输出

    {ident="10.10.239.31"}       								7
    
    • 1

    - clamp_max() 限定最大值

    值小于限定值则显示原有值,值大于限定值则显示限定值。

    • 语法
    clamp_max(v instant-vector, max scalar) 
    
    • 1
    • 语法示例
    clamp_max(system_mem_used_percent{ident="10.10.239.31"},7)
    
    • 1

    - clamp_min() 限定最小值

    值大于限定值则显示原有值,值小于限定值则显示限定值。

    • 语法
    clamp_min(v instant-vector, max scalar) 
    
    • 1
    • 语法示例
    clamp_min(system_mem_used_percent{ident="10.10.239.31"},7)
    
    • 1

    5.3 值变化统计

    - changes() 区间内样本改变次数

    • 语法
    changes(v range-vector)
    
    • 1
    • 语法示例
    changes(system_mem_used_percent{ident="10.10.239.31"}[5m])
    
    • 1

    - resets() 复位统计

    连续样本数值减少,视为复位

    • 语法
    resets(v range-vector)
    
    • 1
    • 语法示例
    resets(system_mem_used_percent{ident="10.10.239.31"}[5m])
    
    • 1

    - delta() 首尾差

    计算区间第一个和最后一个值的差

    delta(v range-vector)
    
    • 1
    • 语法示例
    delta(system_mem_used_percent{ident="10.10.239.31"}[10m])
    
    • 1

    结果显示

    {ident="10.10.239.31"}					-0.004406665458601161
    
    • 1

    - idelta() 尾首差

    计算区间第一个和最后一个值的差

    idelta(v range-vector)
    
    • 1
    • 语法示例
    idelta(system_mem_used_percent{ident="10.10.239.31"}[10m])
    
    • 1

    结果显示

    {ident="10.10.239.31"}						-0.0011583301807851498
    
    • 1

    - rate() 增长率

    说明:计算范围向量中时间序列的平均每秒增长率

    • 语法
    rate(v range-vector)
    
    • 1
    • 语法示例
    rate(system_mem_used_percent{ident="10.10.239.31"}[10m])
    
    • 1

    结果显示

    {ident="10.10.239.31"}					0.1416991173036296
    
    • 1

    - increase() 区间增长量

    计算时间范围内的增量 = 时间范围内秒数 * rate()

    • 语法
    increase(v range-vector)
    
    • 1
    • 语法示例
    increase(system_mem_used_percent{ident="10.10.239.31"}[10m])
    
    • 1

    结果显示

    {ident="10.10.239.31"}					80.79502430097307
    
    • 1

    - irate() 增长率(最后两值计算)

    通过时间范围的最后两个点来计算每秒瞬时增长率。

    • 语法
    irate(v range-vector) 
    
    • 1
    • 语法示例
    irate(system_mem_used_percent{ident="10.10.239.31"}[10m])
    
    • 1

    5.4 日期与时间

    - year() 返回年

    值如果是时间戳,则返回值是几点

    • 语法
    year(v=vector(v instant-vector)
    
    • 1
    • 语法示例
    year(mongodb_instance_local_time)
    
    • 1

    结果显示

    今天是2022/10/24 10:24 星期一

    {app="mongodb", chart="mongodb-7.8.10", ……}				2022
    {app="mongodb", chart="mongodb-7.8.10", ……}			    2022
    {app="mongodb", chart="mongodb-7.8.10", ……}				2022
    
    • 1
    • 2
    • 3

    - month() 返回月

    值如果是时间戳,则返回值是几点

    • 语法
    month(v=vector(v instant-vector)
    
    • 1
    • 语法示例
    month(mongodb_instance_local_time)
    
    • 1

    结果显示

    今天是2022/10/24 10:24 星期一

    {app="mongodb", chart="mongodb-7.8.10", ……}				2
    {app="mongodb", chart="mongodb-7.8.10", ……}			    2
    {app="mongodb", chart="mongodb-7.8.10", ……}				2
    
    • 1
    • 2
    • 3

    - day_of_month() 返回日

    值如果是时间戳,则返回值是这个月的第几天

    • 语法
    day_of_month(v instant-vector)
    
    • 1
    • 语法示例
    day_of_month(mongodb_instance_local_time)
    
    • 1

    结果显示

    今天是2022/10/24 星期一

    {app="mongodb", chart="mongodb-7.8.10", ……}				24
    {app="mongodb", chart="mongodb-7.8.10", ……}			    24
    {app="mongodb", chart="mongodb-7.8.10", ……}				24
    
    • 1
    • 2
    • 3

    - hour() 返回小时

    值如果是时间戳,则返回值是几点

    • 语法
    hour(v instant-vector)
    
    • 1
    • 语法示例
    hour(mongodb_instance_local_time)
    
    • 1

    结果显示

    今天是2022/10/24 10:24 星期一

    {app="mongodb", chart="mongodb-7.8.10", ……}				10
    {app="mongodb", chart="mongodb-7.8.10", ……}			    10
    {app="mongodb", chart="mongodb-7.8.10", ……}				10
    
    • 1
    • 2
    • 3

    - minute() 返回分钟

    值如果是时间戳,则返回值是几点

    • 语法
    minute(v instant-vector)
    
    • 1
    • 语法示例
    minute(mongodb_instance_local_time)
    
    • 1

    结果显示

    今天是2022/10/24 10:24 星期一

    {app="mongodb", chart="mongodb-7.8.10", ……}				24
    {app="mongodb", chart="mongodb-7.8.10", ……}			    24
    {app="mongodb", chart="mongodb-7.8.10", ……}				24
    
    • 1
    • 2
    • 3

    - day_of_week() 返回星期几

    值如果是时间戳,则返回值是星期几

    • 语法
    day_of_week(v instant-vector)
    
    • 1
    • 语法示例
    day_of_week(mongodb_instance_local_time)
    
    • 1

    结果显示

    今天是2022/10/24 星期一

    {app="mongodb", chart="mongodb-7.8.10", ……}				1
    {app="mongodb", chart="mongodb-7.8.10", ……}			    1
    {app="mongodb", chart="mongodb-7.8.10", ……}				1
    
    • 1
    • 2
    • 3

    - day_in_month() 返回该月一共几天

    值如果是时间戳,则返回值是这个月一共几天

    • 语法
    day_in_month(v=vector(v instant-vector)
    
    • 1
    • 语法示例
    day_in_month(mongodb_instance_local_time)
    
    • 1

    结果显示

    今天是2022/10/24 星期一

    {app="mongodb", chart="mongodb-7.8.10", ……}				31
    {app="mongodb", chart="mongodb-7.8.10", ……}			    31
    {app="mongodb", chart="mongodb-7.8.10", ……}				31
    
    • 1
    • 2
    • 3

    - timestamp()

    返回每个样本的时间戳

    • 语法
    timestamp(v instant-vector)
    
    • 1
    • 语法示例
    timestamp(system_mem_used)
    
    • 1

    5.6 标签

    - label_join() 联合标签

    用于建立一个新标签,值链接多个原有标签

    • 语法
    label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)
    
    • 1
    • 语法示例
    label_join(probe_success{group="http", instance="10.1.xxx.68:80", job="http_hq_nginx", project="xxxxx"},"new_label","://","group","instance")
    
    • 1

    结果显示

    probe_success{group="http", instance="10.1.xxx.68:80", job="http_hq_nginx", new_label="http://10.1.xxx.68:80", project="xxxxx"}				1
    
    • 1

    - label_replace() 正则添加标签

    用于建立一个新标签,并付给新值,并支持正则匹配原有值

    • 语法
    label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)
    
    • 1
    • 语法示例
    label_replace(probe_success{instance="10.1.30.68:80"},"port","$1","instance",".*:(.*)")
    
    • 1

    结果显示

    可见新增加了port标签,并从instance标签处匹配到了 80端口。

    probe_success{group="http", instance="10.1.xxx.68:80", job="http_hq_nginx", port="80", project="HQ-AllInOne-PC"}  1
    
    • 1

    5.7 预测

    - predict_linear()

    • 语法
    predict_linear(v range-vector, t scalar)
    
    • 1
    • 语法示例
    predict_linear(system_mem_used_percent{ident="10.10.xxx.31"}[2h],3600)
    
    • 1

    通过2小时内的数据,推算3600s后的数据

    5.8 判断

    - absent() 判断瞬时向量存在

    • 语法
    absent(v instant-vector)
    
    • 1
    • 语法示例
    • 返回空的情况
      • job 的值没有 http_hq_nginx
      • 搜索到的结果不是2
    • 返回值为1
      • 其它情况
    absent(probe_success{job="http_hq_nginx" } == 2 )
    
    • 1
    • 完整示例
    • 搜索到的结果:
    probe_success{job="http_hq_nginx" }
    
    • 1

    结果显示

    所有端口都是存活的,因此返回值都是1

    probe_success{group="http", instance="10.1.xxx.68:80", job="http_hq_nginx", project="HQ-AllInOne-PC"}			1
    probe_success{group="http", instance="10.1.xxx.68:8080", job="http_hq_nginx", project="HQ-AllInOne-PC"}			1
    probe_success{group="http", instance="10.1.xxx.69:80", job="http_hq_nginx", project="HQ-AllInOne-PC"}			1
    probe_success{group="http", instance="10.1.xxx.69:8080", job="http_hq_nginx", project="HQ-AllInOne-PC"}			1
    probe_success{group="http", instance="10.1.xxx.73:80", job="http_hq_nginx", project="HQ-AllInOne-PC"}			1
    probe_success{group="http", instance="10.1.xxx.73:8080", job="http_hq_nginx", project="HQ-AllInOne-PC"}			1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 返回空:标签的值对上了,查询的结果也对
    absent(probe_success{job="http_hq_nginx" } == 1 )
    
    • 1
    • 返回1:标签值不对
    absent(probe_success{job="liubei" } == 1 )
    
    • 1

    结果

    {}			1
    
    • 1
    • 返回1:查询结果对不上
    absent(probe_success{job="http_hq_nginx" } == 2 )
    
    • 1

    结果

    {}			1
    
    • 1

    - absent_over_time() 判断区间值存在

    • 语法
    absent_over_time(v range-vector)
    
    • 1
    • 语法示例
    absent_over_time(probe_success{job="hello"}[1m])
    
    • 1

    结果显示

    job标签没有 “hello”这个值,因此返回 1

    {job="hello"}			1
    
    • 1

    - scalar() 判断是否一个向量

    • 语法
    scalar(v instant-vector)
    
    • 1
    • 语法示例
    scalar(system_mem_used_percent{ident="10.10.239.31"})
    
    • 1
    • 完整示例
    • 返回不是一条记录,因此会返回NaN
    scalar(system_mem_used)
    
    • 1

    返回结果

    scalar				NaN
    
    • 1
    • 只搜到了一条数据,返回该值
    scalar(system_mem_used_percent{ident="10.10.239.31"})
    
    • 1

    返回结果

    scalar	5.230846579167555
    
    • 1

    - vector(s scalar)

    将标量作为没有标签的向量返回

    • 语法
    vector(s scalar)
    
    • 1
    • 语法示例
    vector(scalar(system_mem_used_percent{ident="10.10.239.31"}))
    
    • 1

    结果显示

    {}       5.231388776273454
    
    • 1

    可以回翻一下刚才的scalar的结果,是带scalar

    - sgn() 判断正负

    • 语法
    sgn(v instant-vector)
    
    • 1

    说明:

    • 如果 v 为正,则为 1
    • 如果 v 为负,则为 -1
    • 如果 v 等于 0,则为 0。
    • 语法示例
    sgn(system_mem_used_percent{ident="10.10.239.31"})
    
    • 1
    • 结果显示
    {ident="10.10.239.31"}				1
    
    • 1

    5.9 排序和最值

    - sort() 升序排列

    • 语法
    sort(v instant-vector)
    
    • 1
    • 语法示例
    sort(system_mem_used_percent)
    
    • 1

    - sort_desc() 降序排列

    • 语法
    sort_desc(v instant-vector)
    
    • 1
    • 语法示例
    sort_desc(system_mem_used_percent)
    
    • 1

    - avg_over_time() 区间内取平均

    • 语法
    avg_over_time(range-vector)
    
    • 1

    - min_over_time() 区间内最小值

    • 语法
    min_over_time(range-vector)
    
    • 1

    - max_over_time() 区间内最大值

    • 语法
    max_over_time(range-vector)
    
    • 1

    - sum_over_time() 区间求和

    • 语法
    sum_over_time(range-vector)
    
    • 1

    - count_over_time() 区间值统计

    • 语法

    统计单位时间内取到指标个数

    count_over_time(range-vector)
    
    • 1
    • 语法示例
    count_over_time(system_mem_used_percent{ident="10.10.239.31"}[3m])
    
    • 1

    结果显示

    {ident="10.10.239.31"}			9
    
    • 1

    验证:system_mem_used_percent{ident="10.10.239.31"}[3m]取到的数据确实是 9 条

    - quantile_over_time() 区间分位数

    说明:区间向量内每个度量指标的样本数据值分位数,φ-quantile (0 ≤ φ ≤ 1)

    • 语法
    quantile_over_time(scalar, range-vector) 
    
    • 1

    - stddev_over_time() 区间标准偏差

    说明:区间向量内每个度量指标的总体标准偏差

    • 语法
    stddev_over_time(range-vector)
    
    • 1

    - stdvar_over_time() 区间标准方差

    说明:区间向量内每个度量指标的总体标准方差

    • 语法
    stdvar_over_time(range-vector)
    
    • 1

    5.10 数学计算

    - abs() 绝对值

    • 语法
    abs(v instant-vector)
    
    • 1

    - sqrt() 平方根

    • 语法
    sqrt(v instant-vector)
    
    • 1

    - deriv() 导数

    • 语法
    deriv(v range-vector)
    
    • 1

    - exp() 指数函数

    • 语法
    exp(v instant-vector)
    
    • 1

    - ln()、log2()、log10() 对数

    • 语法
    ln|log2|log10(v instant-vector) 
    
    • 1

    5.11 三角函数、弧度

    • acos(v instant-vector)
    • acosh(v instant-vector)
    • asin(v instant-vector)
    • asinh(v instant-vector)
    • atan(v instant-vector)
    • atanh(v instant-vector)
    • cos(v instant-vector)
    • cosh(v instant-vector)
    • sin(v instant-vector)
    • sinh(v instant-vector)
    • tan(v instant-vector)
    • tanh(v instant-vector)
    • deg(v instant-vector)
    • pi()
    • rad(v instant-vector)

  • 相关阅读:
    数据结构.多项式加法
    【开源】最近写了一个简单的网址导航网站
    让文字在盒子中水平居中与垂直居中
    Android修行手册 - ConstraintLayout示例
    新版Testwell CTC++带来哪些新变化?
    基于Python的渗透测试信息收集系统的设计和实现
    解决Kafka新消费者组导致重复消费的问题
    spring boot 基础特性
    对Spring Bean的一些思考(对Bean的理解及命名问题)
    微服务框架:一招实现降本、提质、增效办公!
  • 原文地址:https://blog.csdn.net/xingzuo_1840/article/details/127467118