输入示例:
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瞬时向量与标量比较,查询node状态
up{job="node"} == bool 1两个瞬时向量比较,查看消息队列容量状态
prometheus_notifications_queue_length < bool prometheus_notifications_queue_capacity 逻辑运算符Prometheus 中存在以下逻辑运算符:
and(与)
or(或)
unless(非)
逻辑运算仅适用于向量
如下我们有4个target,进行相应的逻辑运算,实现和标签选择相似效果。
up{instance!="192.168.1.123:9091"} and up{job!="alertmanager"} up{instance="192.168.1.123:9091"} or up{job="alertmanager"} up unless up{job="alertmanager"}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)通过状态码分别统计
group:
类uniq的用法
stddev、stdvar:
反映一组数据离散程度,用以衡量数据值偏离算术平均值的程度。标准偏差为方差的开平方,标准偏差越小,这些值偏离平均值就越少,反之亦然。
通过标准差来反映网络波动
stddev(rate(node_network_transmit_bytes_total[5m]))rate计算某段时间的速率
count、count_values:
统计总共有几个时序
count(prometheus_http_requests_total)计算每个value的数量
count_values("value",prometheus_http_requests_total)bottomk、topk
计算value中最小的5个时序
bottomk(5,prometheus_http_requests_total)quantile:求数据的分位数