pormetheus之promQL语法

1、基本语法

(1)node_cpu_guest_seconds_total监控项数据(指标项)

(2)node_cpu_guest_seconds_total{cpu="0"}时间序列

花括号里的表示标签。node使用cpu的描述统计,符合标签cpu=0的时间序列的查询结果

2、特殊标签:__address__(双下划线)

prometheus的默认标签,不显示在target页面中,只有把光标移动到label字段上才能显示默认标签

3、匹配标签值的操作符

=

完全等于

!=

不等于(取反)

=~

正则表达式匹配

!~

正则表达式取反

4、数学运算

+

加法

-

减法

*

乘法

/

除法

%

取余

^

幂运算

通配符

.

任意单个字符

.*

多个任意字符

.+

一个或者多个任意字符

5、数据类型

1

瞬时向量

一组时序,每个时序只有一个采样值

2

区间向量

一组时序,每个时序包含的是一段时间内的多个采样值

时长单位类型

s

seconds秒

m

minutes分

h

hour小时

d

day天

w

weeks周

y

years年

举例:rate(container_cpu_load_average_10s{instance="node2"}[5m])

过去每5分钟node2的采样值

3

标量数据

浮点数

4

字符串

一个字符串

5

counter

总数,在promQL语句中没有直接作用,根据函数指标:rate、topk、increase、irate生成样本数据的变化情况

注:rate、increase、irate均要结合区间向量一起使用

①topk(3,node_cpu_seconds_total)

increase(node_cpu_seconds_total[5m])每5分钟内数据的增量

③irate高灵敏度的函数,计算指标的瞬时速率,基于样本范围内的最后两个样本进行计算,irate更适用于短时间内的变化速率分析,rate适用于长时间内的变化速率分析

irate(node_cpu_seconds_total[5m])

6

gauge

存储值可增可减的样本数据。一般用于求和、求平均数、取最小值和最大值。结合delta、predict_linear函数一起使用

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

delta(container_memory_cache{instance="node1"}[5m])

②predict_linear线性回归,可以预测时间序列在V点和T秒之后的变化,根据过去一定时间范围内的行为预测样本数据的变化趋势

predict_linear(node_filesystem_files{instance="master"}[2h],4*3600)

统计过去2小时样本数据的变化,再根据过去2小时的数据变化预测未来4小时的数据变化

7

historgram

对一定时间范围内的数据采样,通常是请求持续的时长和响应大小的类型,计入一个可配置的桶中(bucket),通过区间对样本进行筛选,也可以统计求和

node_authorizer_graph_actions_duration_seconds_bucket{instance="20.0.0.17:6443", le="0.0002"}

 le="0.0002"表示观测桶的上边界,样本的统计区间,表示所有的样本值小于等于上边界值的所有样本数量

node_authorizer_graph_actions_duration_seconds_bucket{instance="20.0.0.17:6443", le="+Inf"}

le="+Inf"最大区间,包含的所有样本数量

apiserver_current_inqueue_requests{instance="20.0.0.17:6443"} >= 1

快速了解监控样本的分布情况

8

summary

分位数计算,类似于historgram,在客户端在一段时间内(summary默认10分钟)对每个采样点进行统计,计算并存储分位数的值,服务端可以直接抓取相应的值(0<分位数<1)

apiserver_admission_step_admission_duration_seconds_summary

6、聚合操作符

sum

求和

min

最小值

max

最大值

avg

平均值

stddev

标准差

stdvar

方差

count

元素个数

count_value

等于某个值的元素个数

topk

最大的元素个数

bottomk

最小的元素个数

quantile

分位数

注:topk和bottomk要带入数值,表示取前几位还是后几位

①求和

sum(container_cpu_usage_seconds_total)

②方差

stdvar(container_cpu_usage_seconds_total)

③bottomk

bottomk(3,container_cpu_usage_seconds_total)最小的3个元素

④quantile

quantile(0.65,container_cpu_usage_seconds_total)

7、业务中常用语句

①计算某个节点的所有容器的使用容器的时间序列

sum(container_memory_usage_bytes{instance="node1"})/1024/1024/1024

②node1最近1分钟内所有容器CPU的使用率

方式1:sum(rate(container_cpu_usage_seconds_total{instance="node1"}[1m]))

③最近1分钟所有容器的CPU使用率

sum by (id) (rate(container_cpu_usage_seconds_total{id!="/"}[1m]))

④查询k8s中最近1分钟每个pod的CPU使用率

sum by(name) (rate(container_cpu_usage_seconds_total{image!="",name!=""}[1m]))

常用指标总结:

(1)计算 master01 节点所有容器总计内存:

sum(container_memory_usage_bytes{instance=~"master01"})/1024/1024/1024

(2)计算 master01 节点最近 1m 所有容器 cpu 使用率:

sum (rate (container_cpu_usage_seconds_total{instance=~"master01"}[1m])) / sum (machine_cpu_cores{ instance =~"master01"}) * 100

(3)计算最近 1m 所有容器 cpu 使用率

sum by (id)(rate (container_cpu_usage_seconds_total{id!="/"}[1m]))

(4)查询 K8S 集群中最近 1m 每个 Pod 的 CPU 使用率

sum by (name)(rate (container_cpu_usage_seconds_total{image!="", name!=""}[1m]))

①每台主机 CPU 在最近 5 分钟内的平均使用率

(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100

②查询 1 分钟的 load average 的时间序列是否超过主机 CPU 数量 2 倍

node_load1 > on (instance) 2 * count (node_cpu_seconds_total{mode="idle"}) by (instance)

③计算主机内存使用率

可用内存空间:空闲内存、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

④计算所有 node 节点所有容器总计内存:

sum  by (instance) (container_memory_usage_bytes{instance=~"node*"})/1024/1024/1024

⑤计算 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的时间总和

⑥计算最近 5m 每个容器 cpu 使用情况变化率

sum (rate(container_cpu_usage_seconds_total[5m])) by (container_name)

⑦查询 K8S 集群中最近 1m 每个 Pod 的 CPU 使用情况变化率

sum (rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m])) by (pod_name)

#由于查询到的数据都是容器相关的,所以最好按照 Pod 分组聚合

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值