Prometheus的promql语句

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是长时间的

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 分组聚合

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值