promQL详细语法介绍

目录

promQL 在表达式中支持的数据类型

简单语法介绍

rate的用法

指标过滤搜索

时间单位 

聚合表达式

 11个聚合函数

 二元运算符(Binary Operators)

 二元运算符优先级

向量匹配

 向量一对一匹配

向量一对多/多对一匹配


promQL 在表达式中支持的数据类型

即时向量  时间

范围向量 数量

标量:单一数据没有方向的概念

字串: 一般都是标签对应值

GET(GET 请求方法):它是一种用于从服务器获取数据的请求方法

POST(POST 请求方法):它是一种用于向服务器提交数据的请求方法。 \

简单语法介绍

prometheus_http_requests_total 查询 HTTP的全部 请求的数量。

 prometheus_http_requests_total[2m]  获取过去 2 分钟内的数据

prometheus_http_requests_total[2m]offset 5m    往前5分钟开始,获取两分钟内的数据

prometheus_http_response_size_bytes_sum    /prometheus_http_response_size_bytes_count  在同一组数据中可以直接做除法

大小总和/数量

sum(prometheus_http_requests_total)by(code) ,,by(code)  选定code ,sum总请求数量

avg_over_time(prometheus_http_requests_total[1h])  计算过去 1 小时内的指标的平均值。

rate的用法

简单来讲就是在你指定时间内的每秒的平均变化量

他可以把即时向量转换为范围向量的图形结果

rate (prometheus_http_requests_total[2m])

指标过滤搜索

指定标签名之类的进行指定过滤

过滤前

 过滤后

 这样也可以

 进行速率计算

 _name_ ~  可以匹配标签名称,对名称进行过滤

时间单位 

聚合表达式

 PromQL中的聚合操作语法格式可采用如下面两种格式之一

        ◼ <aggr-op>([parameter,] <vector expression>) [without|by (<label list>)]
        ◼ <aggr-op> [without|by (<label list>)] ([parameter,] <vector expression>)

 分组聚合:先分组、后聚合

         ◼ without:从结果向量中删除由without子句指定的标签,未指定的那部分标签则用作分组标准;

        ◼ by:功能与without刚好相反,它仅使用by子句中指定的标签进行聚合,结果向量中出现但未被by子句指定的 标签则会被忽略;

◆为了保留上下文信息,使用by子句时需要显式指定其结果中原本出现的job、instance等一类的标签

 ###因为他是只有或者排除,所以需要聚合函数进行统计列出###

 sum without (code)(prometheus_http_requests_total)   #统计de标签的种类

 sum by (code)(prometheus_http_requests_total)  #统计只有code标签的种类

 11个聚合函数

  • sum(): 计算时间序列数据的总和。
  • avg(): 计算时间序列数据的平均值。
  • max(): 找到时间序列数据的最大值。
  • min(): 找到时间序列数据的最小值。
  • count():  计算时间序列数据的计数。
  • stddev(): 计算时间序列数据的标准差。
  • stdvar(): 计算时间序列数据的方差。
  • topk(): 找到时间序列数据中的前 K 个最大值。
  • bottomk(): 找到时间序列数据中的前 K 个最小值。
  • quantile(): 计算时间序列数据的分位数。
  • rate(): 计算时间序列数据的速率(变化率)。

 二元运算符(Binary Operators)

PromQL支持基本的算术运算和逻辑运算,这类运算支持使用操作符连接两个操作数,因而也称为二元运算符或二元操作符;

  1. 算术运算符:

    • +:加法运算符。
    • -:减法运算符。
    • *:乘法运算符。
    • /:除法运算符。
    • %:取模运算符。
  2. 比较运算符:

    • ==:相等性比较运算符。
    • !=:不等性比较运算符。
    • >:大于比较运算符。
    • <:小于比较运算符。
    • >=:大于等于比较运算符。
    • <=:小于等于比较运算符。
  3. 逻辑运算符:

    • and:逻辑与运算符。
    • or:逻辑或运算符。
    • unless:逻辑非运算符。

  ◼ 目前,该运算仅允许在两个即时向量间进行,尚不支持标量参与运算;

 二元运算符优先级

Prometheus的复杂运算中,二元运算符存在如下给定次序中所示的由高到低的优先级

◼ ^

◼ *, /, %

◼ +, -

◼ ==, !=, =, >

◼ and, unless

◼ or

 具有相同优先级的运算符满足结合律(左结合),但幂运算除外,因为它是右结合机制;

 可以使用括号( )改变运算次序;

向量匹配

 即时向量间的运算是PromQL的特色之一;运算时,PromQL为会左侧向量中的每个元素找到匹配的元素,其匹配行为有两种基本类型
◼ 一对一 
◼ 一对多或多对一 

 向量一对一匹配

即时向量的一对一匹配

  • 从运算符的两边表达式所获取的即时向量间依次比较,并找到唯一匹配(标签完全一致)的样本值;
  • 找不到匹配项的值则不会出现在结果中;
rate(prometheus_http_requests_total{code="200"}[5m])>0.1*rate(prometheus_http_requests_total{code="200"}[1d])

这个例子就是一对一,意思就是过去五分的总值是否大于过去1天code200的总值的百分之一

  下面这个官方图例子就是多对一匹配的例子

向量一对多/多对一匹配

一对多/多对一,需要保证相对的数据是有用的

一对多/多对一匹配

  •  “一”侧的每个元素,可与“多”侧的多个元素进行匹配;
  •  必须使用group_left或group_right明确指定哪侧为“多”侧; 

group_left表示左侧为多测,  多测:表示可以出现多次,一侧表示只能有一个进行比较

group_right表示右侧为多测

 一对多

rate(prometheus_http_requests_total{code=~"2.*"}[5m])>.1*rate(prometheus_http_requests_total[5m])
这个 Prometheus 查询表达式是一个告警规则,用于检测过去 5 分钟内以状态码以 "2" 开头的 HTTP 请求的速率是否超过总请求数的 10%。
    

    #prometheus_http_requests_total 记录了所有 HTTP 请求的计数器指标。。
    #{code=~"2.*"} 是一个标签选择器,用于筛选出具有状态码以 "2" 开头的时间序

 下面这个官方图例子就是多对一匹配的例子

rate(Method_code:http_errors[5m]) / ignoring(code) group_left rate(method:http_requests[5m])

    rate(Method_code:http_errors[5m]):计算过去 5 分钟内 Method_code:http_errors 指标的速率。
    / ignoring(code):在计算过程中忽略 code 标签的差异。
    group_left:按照左侧的标签进行分组。
    rate(method:http_requests[5m]):计算过去 5 分钟内 method:http_requests 指标的速率,并按照 method 标签进行分组。

这个表达式使用 Prometheus 查询语言(PromQL),用于计算在过去 5 分钟内的 HTTP 错误率与 HTTP 请求速率之比,同时忽略状态码标签(code)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PromQLPrometheus的查询语言,用于查询监控数据。以下是PromQL语法的大全: 1. 基本查询 - metric_name:指标名称,如node_cpu_seconds_total - time_range:时间范围,如5m、1h等 - 示例:metric_name{label_selector}[time_range] 2. 范围查询 - range vector selector:范围向量选择器,用于选择一段时间范围内的数据,如node_cpu_seconds_total{job="node-exporter"}[5m] - offset modifier:偏移量修饰符,用于从当前时间向前或向后偏移一段时间,如node_cpu_seconds_total{job="node-exporter"}[5m] offset 1h 3. 聚合查询 - sum():求和函数 - avg():求平均值函数 - max():求最大值函数 - min():求最小值函数 - count():统计样本数函数 - topk():取出前k个样本函数 - bottomk():取出后k个样本函数 - 示例:sum(metric_name{label_selector}) by (label_name) 4. 算术运算 - +:加法运算 - -:减法运算 - *:乘法运算 - /:除法运算 - %:取模运算 5. 逻辑运算 - and:逻辑与运算 - or:逻辑或运算 - unless:逻辑非运算 6. 布尔表达式 - ==:判断是否相等 - !=:判断是否不相等 - >、>=、<、<=:比较运算符 7. 函数操作符 - rate():计算速率函数 - irate():计算瞬时速率函数 - deriv():计算导数函数 - predict_linear():线性预测函数 - holt_winters():Holt-Winters函数 8. 子查询 - 子查询可以在大括号中嵌套另一个查询语句,如sum(rate(node_cpu_seconds_total{job="node-exporter"}[5m])) by (instance) 以上就是PromQL语法的大全,你可以根据需要选择相应的语法来进行查询。如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值