Prometheus的PromQL语法讲解和使用示例

1. PromQL介绍

PromQL提供对时间序列数据进行逻辑运算、过滤、聚合的支持。应用于数据查询、可视化、告警处理

2. 基本用法

2.1 查询时间序列

点击Prometheus图标,进行查询页面。可以点击地图图标查看有哪些metrics name。输入要查询的metrics name和过滤条件,然后点击执行就会返回该时间序列中的一个瞬时(最新)监控数据

其中过滤条件支持完全匹配和正则匹配

  • 完全匹配支持:=!=
  • 正则匹配支持:=~!~,多个表达式之间使用|进行分隔
    查询时间序列

2.2 范围查询

查询过去一段时间范围内的监控数据时,需要使用区间向量表达式。如查询最近5分钟内的所有监控数据,一个label会有该时间范围内的一系列监控数据

范围查询时间范围还支持s(秒)、m(分钟)、h(小时)、d(天)、w(周)、y(年)

2.3 时间位移操作

在瞬时向量表达式或区间向量表达式中,都是以当前时间为基准。如果我们想查询,5 分钟前的瞬时监控数据,可以使用时间位移操作offset

时间位移操作

2.4 聚合操作

可以对多个label的监控数据进行聚合,形成一条新的时间序列监控数据。如下公式:先取每个label最近5分钟的一系列时间序列。在每个label下,取最近的两个点计算速率。最后按code进行分组,对速率进行求和

聚合操作

2.5 标量和字符串

标量:一个浮点型的数字值,没有时序。可以通过scalar()函数将单个瞬时向量转换为标量,比如scalar(sum(prometheus_http_requests_total{}))

scalar
字符串

格式还有:"this is a string"'this is a string'

字符串

3. 表达式的合法格式

所有的PromQL表达式都必须至少包含一个指标名称(例如prometheus_http_requests_total),或一个不会匹配到空字符串的标签过滤器(例如{code=”200”})。如{job=~".*"}不合法,因为会匹配到空字符串

标签过滤器还可以使用内置的__name__标签来指定监控指标名称

__name__

4. PromQL操作符

4.1 数学运算

支持的所有数学运算符:+(加法)、-(减法) 、*(乘法)、/(除法)、%(求余)、^(幂运算)

数学运算

4.2 布尔运算

支持以下布尔运算符如下:==(相等)、!=(不相等)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)

布尔运算默认的作用是对结果进行过滤。使用bool修饰符,可以不进行过滤,而是返回1(true)或0(false)。如下所示

bool修饰符

4.3 集合运算符

通过集合运算,可以在两个瞬时向量之间进行相应的集合操作。支持以下集合运算符:

  • and:集合1和集合2都有的label
  • or:集合1和集合2的所有label(重叠的label只取一份)
  • unless:集合1有,但集合2没有的label
    集合运算符

4.4 操作符优先级

操作符中优先级由高到低依次为:

  • ^
  • *, /, %
  • +, -
  • ==, !=, <=, =, >
  • and, unless
  • or

4.5 聚合操作

可以将瞬时表达式返回的样本数据进行聚合,形成一个新的时间序列。支持的聚合操作符如下:

  • sum(求和)
  • min(最小值)
  • max(最大值)
  • avg(平均值)
  • stddev(标准差)
  • stdvar(标准差异)
  • count(计数)
  • count_values(对value进行计数)
  • bottomk(倒序排序后,后n条时序)
  • topk(倒序排序后,取前n条时序)
  • quantile(φ, express):其中0 ≤ φ ≤ 1。计算当前所有标签的数据值,在指定百分位的一个数据值。例如当φ为0.5时,表示计算当前所有标签的中位数

使用聚合操作的语法如下:

<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)]
  • 只有count_values、quantile、topk、bottomk支持参数(parameter)
  • without用于从计算结果中移除列出的标签,而保留其它标签。by的计算结果
    中只保留列出的标签,其余标签则移除
  • label list使用逗号进行分隔

count_values的使用示例如下:

count_valuesquantile的使用示例如下:
quantile

猜你喜欢

转载自blog.csdn.net/yy8623977/article/details/125302063