pormetheus之promQL语法

1、基本语法

(1)node_cpu_guest_seconds_total监控项数据(指标项)pormetheus之promQL语法_第1张图片pormetheus之promQL语法_第2张图片

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

花括号里的表示标签。node使用cpu的描述统计,符合标签cpu=0的时间序列的查询结果pormetheus之promQL语法_第3张图片

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

prometheus的默认标签,不显示在target页面中,只有把光标移动到label字段上才能显示默认标签pormetheus之promQL语法_第4张图片pormetheus之promQL语法_第5张图片pormetheus之promQL语法_第6张图片

3、匹配标签值的操作符

=

完全等于

!=

不等于(取反)

=~

正则表达式匹配

!~

正则表达式取反

pormetheus之promQL语法_第7张图片

4、数学运算

+

加法

-

减法

*

乘法

/

除法

%

取余

^

幂运算

通配符

.

任意单个字符

.*

多个任意字符

.+

一个或者多个任意字符

5、数据类型

1

瞬时向量

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

pormetheus之promQL语法_第8张图片

2

区间向量

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

时长单位类型

s

seconds秒

m

minutes分

h

hour小时

d

day天

w

weeks周

y

years年

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

过去每5分钟node2的采样值

pormetheus之promQL语法_第9张图片

3

标量数据

浮点数

4

字符串

一个字符串

5

counter

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

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

①topk(3,node_cpu_seconds_total)

pormetheus之promQL语法_第10张图片

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

pormetheus之promQL语法_第11张图片

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

irate(node_cpu_seconds_total[5m])

pormetheus之promQL语法_第12张图片

pormetheus之promQL语法_第13张图片

6

gauge

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

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

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

pormetheus之promQL语法_第14张图片

pormetheus之promQL语法_第15张图片

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

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

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

pormetheus之promQL语法_第16张图片

7

historgram

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

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

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

pormetheus之promQL语法_第17张图片

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

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

pormetheus之promQL语法_第18张图片apiserver_current_inqueue_requests{instance="20.0.0.17:6443"} >= 1

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

pormetheus之promQL语法_第19张图片

8

summary

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

apiserver_admission_step_admission_duration_seconds_summarypormetheus之promQL语法_第20张图片

6、聚合操作符

sum

求和

min

最小值

max

最大值

avg

平均值

stddev

标准差

stdvar

方差

count

元素个数

count_value

等于某个值的元素个数

topk

最大的元素个数

bottomk

最小的元素个数

quantile

分位数

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

①求和

sum(container_cpu_usage_seconds_total)

pormetheus之promQL语法_第21张图片②方差

stdvar(container_cpu_usage_seconds_total)

pormetheus之promQL语法_第22张图片

pormetheus之promQL语法_第23张图片③bottomk

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

pormetheus之promQL语法_第24张图片④quantile

quantile(0.65,container_cpu_usage_seconds_total)

pormetheus之promQL语法_第25张图片

pormetheus之promQL语法_第26张图片

7、业务中常用语句

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

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

pormetheus之promQL语法_第27张图片②node1最近1分钟内所有容器CPU的使用率

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

pormetheus之promQL语法_第28张图片

pormetheus之promQL语法_第29张图片

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

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

pormetheus之promQL语法_第30张图片④查询k8s中最近1分钟每个pod的CPU使用率

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

pormetheus之promQL语法_第31张图片

pormetheus之promQL语法_第32张图片

常用指标总结:

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

你可能感兴趣的:(kubernetes)