【Prometheus】Prometheus的PromQL语句

本文详细介绍了Prometheus的PromQL语言,包括语法、标签操作、数学运算、时长单位、数据类型以及常用业务查询示例,帮助读者掌握监控和分析时序数据的技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Prometheus promQL的语法:

#时间序列
node_cpu_guest_seconds_total{cpu="0"}
监控(指标数据)		{标签}

node使用CPU的描述的统计,符合标签CPU=0的时间序列的查询结果

指标+标签生成时间序列

标签:

__address__:双下划线标签,是Prometheus系统的默认标签,不显示在target页面中,只有把光标移动到label的字段上,才能显示默认标签

匹配标签值操作符号:

= 完全相等

!= 不等于,相当于取反

=~ 正则表达式匹配

!~ 正则表达式取反

数学运算符:

+ 加法

- 减法

* 乘法

/ 除法

% 取余

^ 幂运算

常用的通配符:

. 任意单个字符

.* 多个任意字符

.+ 一个或者多个任意字符

时长的单位类型:

s seconds秒

m minute分

h hour时

d day天

w weeks周

y years年

数据类型:

  1. 瞬时向量:一组时序,每个时序只有一个采样值
  2. 区间向量:一组时序,每个时序包含一段时间内的多个采样值
  3. 标量数据:浮点数,小数
  4. 字符串:一个字符串
  5. counter:总数,在整个promQL中没有直接作用。通过rate topk increase irate这些函数生成样本数据的变化情况
topk(3,node_cpu_seconds_total)
#展示当前数据前三位的数据

increase要结合区间向量一起使用,展示时间序列在一定范围内的增量

increase(node_cpu_seconds_total[5m])
#在五分钟之内的增量趋势

irate:高灵敏度的函数,计算指标的瞬时速率,基于样本范围内的最后两个样本进行计算

irate更适合于短期范围内的变化速率分析。rate是长时间的

6、gauge:用于存储值,可增可减的指标样本数据,求和,求平均数,取最小值和最大值。也会结合两个特殊的函数:dalta额redict_linear函数一块使用

delta:计算范围向量中每个时间序列元素的第一个和最后一个指相减的差。展示不同时间点上样本的值的差值

delta(container_memory_cache{instance="node01"}[5m])
#5分钟内的差值
predict_linear:可以预测时间序列,V在T秒之后的变化趋势,对样本数据的变化趋势的预测
predict linear(node_filesystem_files{instance="master01"}[2h],4*3600)
node_filesystem_files
#文件数,选择的标签是master01 2h过去两个小时,4*3600未来四个小时
统计过去两个小时的变化,根据这两小时的变化,预测未来4小时的变化

7、historgram:直方图,对一定时间范围内的数据进行采样,通常是请求持续的时长和响应大小的类型这一类,计入一个可配的桶bucket。通过区间对样本进行筛选,也可以统计求和

node_authorizer_graph_action_duration_seconds_bucket{instance="20.0.0.61:6443",le="0.0002"}
#观测桶的上边界,样本的统计区间,表示所有的样本值小于等于上边界的所有样本数量
#le="+Inf",最大区间,包含的所有样本数量

apiserver_current_inqueue_requests{instance="192.168.233.91:6443"} >= 1
#快速的了解监控样本的分布情况

8、summary:分位数计算,类似于historgram,在客户端于一段时间内(默认时间10分钟)

的每个采样点进行统计,计算并且存储了分位数的值。服务端可以直接抓取相应的值

quantile="0.5"
这里的0.5就是分位,他的范围是0<P<1

rate(node_cpu_seconds_total{ instance="node01"}[5m])
#展示的是指标node_cpu_seconds_total,指标是过去每五分钟的一个采样值,对应的标签为 instance="node01"

聚合操作符:

sum 求和

min 最小值

max 最大值

avg 平均值

stdev 标准差

stdvar 方差

count 元素个数

count_values 等于某个值的元素个数

topk 最大的元素个数

bottomk 最小的元素个数

quantile 分位数

业务中常用的语句:

#计算 master01 节点所有容器总计内存:
sum(container_memory_usage_bytes{instance=~"master01"})/1024/1024/1024

#计算 master01 节点最近 1m 所有容器 cpu 使用率:
sum (rate (container_cpu_usage_seconds_total{instance=~"master01"}[1m])) / sum (machine_cpu_cores{ instance =~"master01"}) * 100

#计算最近 1m 所有容器 cpu 使用率
sum by (id)(rate (container_cpu_usage_seconds_total{id!="/"}[1m]))

#查询 K8S 集群中最近 1m 每个 Pod 的 CPU 使用率
sum by (name)(rate (container_cpu_usage_seconds_total{image!="", name!=""}[1m]))



(1)每台主机 CPU 在最近 5 分钟内的平均使用率
(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100

(2)查询 1 分钟的 load average 的时间序列是否超过主机 CPU 数量 2 倍
node_load1 > on (instance) 2 * count (node_cpu_seconds_total{mode="idle"}) by (instance)

(3)计算主机内存使用率
可用内存空间:空闲内存、buffer、cache 指标之和
node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes

已用内存空间:总内存空间减去可用空间
node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)

使用率:已用空间除以总空间
(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100

(4)计算所有 node 节点所有容器总计内存:
sum  by (instance) (container_memory_usage_bytes{instance=~"node*"})/1024/1024/1024

(5)计算 node01 节点最近 1m 所有容器 cpu 使用率:
sum (rate(container_cpu_usage_seconds_total{instance="node01"}[1m])) / sum (machine_cpu_cores{instance="node01"}) * 100
#container_cpu_usage_seconds_total 代表容器占用CPU的时间总和

(6)计算最近 5m 每个容器 cpu 使用情况变化率
sum (rate(container_cpu_usage_seconds_total[5m])) by (container_name)

(7)查询 K8S 集群中最近 1m 每个 Pod 的 CPU 使用情况变化率
sum (rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m])) by (pod_name) 
#由于查询到的数据都是容器相关的,所以最好按照 Pod 分组聚合

Prometheus PromQLPrometheus Query Language)是用于查询和分析 Prometheus 时间序列数据的查询语言。它提供了丰富的功能和表达能力,使用户能够根据自己的需求灵活地检索、聚合和计算指标数据。 PromQL 支持以下主要操作: 1. 选择时间序列:通过指定指标名称和一组标签来选择特定的时间序列。例如,`http_requests_total{job="api-server", status="200"}` 选择 `http_requests_total` 指标的 `job` 标签值为 "api-server" 且 `status` 标签值为 "200" 的时间序列。 2. 聚合操作:可以对选择的时间序列进行各种聚合操作,如求和、平均值、最大值、最小值等。例如,`sum(http_requests_total)` 对 `http_requests_total` 指标的所有时间序列进行求和。 3. 算术操作:可以对选择的时间序列进行加减乘除等算术运算。例如,`http_requests_total{job="api-server"} - http_errors_total{job="api-server"}` 计算 `http_requests_total` 和 `http_errors_total` 之间的差值。 4. 函数操作:PromQL 提供了许多内置函数,如 `rate()`、`increase()`、`irate()` 等,用于计算速率和增长率等指标。例如,`rate(http_requests_total{job="api-server"}[5m])` 计算 `http_requests_total` 指标的 5 分钟速率。 5. 筛选操作:可以使用一些条件和操作符对时间序列进行筛选和过滤。例如,`http_requests_total > 100` 筛选出 `http_requests_total` 指标值大于 100 的时间序列。 通过组合和嵌套这些操作,用户可以编写复杂的查询语句来获取所需的指标数据,并支持可视化和告警等应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值