PromQL全解析 (2)

输入示例:

method_code:http_errors:rate5m{method="get", code="500"} 24 method_code:http_errors:rate5m{method="get", code="404"} 30 method_code:http_errors:rate5m{method="put", code="501"} 3 method_code:http_errors:rate5m{method="post", code="500"} 6 method_code:http_errors:rate5m{method="post", code="404"} 21 method:http_requests:rate5m{method="get"} 600 method:http_requests:rate5m{method="del"} 34 method:http_requests:rate5m{method="post"} 120

查询示例:

group_left以左侧为准

method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m

结果示例:

{method="get", code="500"} 0.04 // 24 / 600 {method="get", code="404"} 0.05 // 30 / 600 {method="post", code="500"} 0.05 // 6 / 120 {method="post", code="404"} 0.175 // 21 / 120 比较运算符

Prometheus 中存在以下比较运算符:

==(相等)

!=(不相等)

>(大于)

<(小于)

>=(大于或等于)

<=(小于或等于)

两个标量之间比较,在运算符后跟bool修饰,结果0( false) 或1 ( true)

10 < bool 5

image-20220305140444783

瞬时向量与标量比较,查询node状态

up{job="node"} == bool 1

image-20220305144157027

两个瞬时向量比较,查看消息队列容量状态

prometheus_notifications_queue_length < bool prometheus_notifications_queue_capacity

image-20220305143955740

逻辑运算符

Prometheus 中存在以下逻辑运算符:

and(与)

or(或)

unless(非)

逻辑运算仅适用于向量

如下我们有4个target,进行相应的逻辑运算,实现和标签选择相似效果。

image-20220305183445996

up{instance!="192.168.1.123:9091"} and up{job!="alertmanager"}

image-20220305183944382

up{instance="192.168.1.123:9091"} or up{job="alertmanager"}

image-20220305183849660

up unless up{job="alertmanager"}

image-20220305184304201

Prometheus 中二元运算符的优先级,从高到低。

^

*, /, %,atan2

+,-

==, !=, <=, <, >=,>

and,unless

or

相同优先级的运算符是左结合的

聚合运算符

Prometheus 支持以下内置聚合运算符,可用于聚合单个瞬时向量,生成新的向量:

sum(总和)

min(最小)

max(最大)

avg(平均值)

group(分组)

stddev(标准偏差)

stdvar(标准方差)

count(计算向量中的元素个数)

count_values(计算具有相同值的元素个数)

bottomk(样本值的最小 k 个元素)

topk(按样本值计算的最大 k 个元素)

quantile(分位数计算 φ-quantile (0 ≤ φ ≤ 1)

聚合运算符可通过 without、by 根据标签扩展

sum、min、max、avg:

计算http请求的总和,最大、最小请求的url的数量,平均数量

sum(prometheus_http_requests_total)

image-20220305230959842

通过状态码分别统计

image-20220305231557223

group:

类uniq的用法

image-20220305231747791

stddev、stdvar:

反映一组数据离散程度,用以衡量数据值偏离算术平均值的程度。标准偏差为方差的开平方,标准偏差越小,这些值偏离平均值就越少,反之亦然。

通过标准差来反映网络波动

stddev(rate(node_network_transmit_bytes_total[5m]))

rate计算某段时间的速率

image-20220306005605026

count、count_values:

统计总共有几个时序

count(prometheus_http_requests_total)

image-20220305233618880

计算每个value的数量

count_values("value",prometheus_http_requests_total)

image-20220305233949668

bottomk、topk

计算value中最小的5个时序

bottomk(5,prometheus_http_requests_total)

image-20220305234204310

quantile:求数据的分位数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjdys.html