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])

指标过滤搜索

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

过滤前

promQL详细语法介绍_第1张图片

 过滤后promQL详细语法介绍_第2张图片

 这样也可以promQL详细语法介绍_第3张图片

 进行速率计算

promQL详细语法介绍_第4张图片 _name_ ~  可以匹配标签名称,对名称进行过滤

promQL详细语法介绍_第5张图片

时间单位 

promQL详细语法介绍_第6张图片

聚合表达式

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

        ◼ ([parameter,] ) [without|by (

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

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

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

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

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

 sum without (code)(prometheus_http_requests_total)   #统计de标签的种类promQL详细语法介绍_第7张图片

 sum by (code)(prometheus_http_requests_total)  #统计只有code标签的种类promQL详细语法介绍_第8张图片

 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的总值的百分之一

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

promQL详细语法介绍_第9张图片

向量一对多/多对一匹配

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

一对多/多对一匹配

  •  “一”侧的每个元素,可与“多”侧的多个元素进行匹配;
  •  必须使用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" 开头的时间序

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

promQL详细语法介绍_第10张图片

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)。

你可能感兴趣的:(Prometheus,笔记)