Prometheus promQL语法

node_cpu_guest_seconds_total{cpu="0"}#时间序列

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

container_cpu_load_average_10s#时间序列

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

匹配标签值 操作符号

= 等于

!= 不等于,相当于取反

=~ 正则表达式匹配

!~ 正则表达式取反

数字运算

+加法

*减法

/除法

*乘法

%取余

^幂运算

通配符

.任意单个字符

.*多个任意字符

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

时长的单位类型

s seconds 秒

m minutes 分

h hour 小时

d day 天

w weeks 周

y years 年

数据类型

1、瞬间向量 一组时序,每个时序只有一个采样值

2、区间向量 一组时序,每个时序包含一段时间内的多个采样值

rate(container_cpu_load_average_10s{instance="node02"}[5m])
展示:container_cpu_load_average_10s指标的过去每5分钟的采样值,对应的标签是node02

3、标量数据 浮点数

4、字符串 一个字符串

5、counter类型 总数,在promQL当中没有直接作用,rate topk increase irate函数来生成样本数的变化,

increase要结合区间向量一起使用increase(node_cpu_seconds_total[5m])	每五分钟的增量图

irate	高灵敏度的函数,计算指标是瞬时速率,基于样本范围内的最后两个样本数据进行计算,irate更适用与短时间内的变化速率分析
irate(node_cpu_seconds_total[5m])

6、gauge类型 用于存储值可增可减的指标样本数据,求和,求平均数,去最小值和最大值,也会结合delta和predict_linear函数一起使用

delta	计算范围向量中的每个时间序列元素的第一个值和最后一个值之间的差,展示不同时间点上样本值的差值
delta(container_memory_cache{instance="node01"}[5m])

predict_linear	可以预测时间序列V 在T秒之后的变化趋势,对样本数据的变化趋势做出预测
predict_linear(node_filesystem_files{instance="master01"}[2h],4*3600)
node_filesystem_files 文件数,选择的标签是master01 2个小时的数据变化,预测未来4个小时的数据变化

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

node_authorizer_graph_actions_duration_seconds_bucket{instance="20.0.0.70:6443",le="0.0002"}
观测桶的上边界,样本呢的统计区间,表示所有的样本值小于等于上边界值的所有样本数量

node_authorizer_graph_actions_duration_seconds_bucket{instance="20.0.0.70:6443",le="+Inf"}
le="+Inf",最大区间,包含的所有样本数量

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

8、Summary 分位数计算,类似于historgam,例如:在客户端于一段时间内(默认10分钟)的每个采样点进行统计,计算并且存储了分位数的值,服务端可以直接抓取响应的值

聚合操作符

sum 求和

min 最小值

max 最大值

avg 平均值

stddev 标准差

stdvar 方差

count 元素个数

count_values 等于某个值的元素个数

topk 最大的元素的个数

bottomk 最小的元素的个数

quantle 分位数

常用语句

1、计算某个节点的所有容器的使用内存的时间序列

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

2、node01节点最近1m所有容器使用的资源

sum(rate(container_cpu_user_seconds_total{instance="node01"}[1m]))

3、最近1分钟,cpu的使用率

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

4、查询k8s集群当中最近1m,cpu使用率

sum by (name)(rate(container_cpu_user_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 分组聚合

5、计算 master01 节点所有容器总计内存:

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

6、计算 master01 节点最近 1m 所有容器 cpu 使用率:

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

你可能感兴趣的:(prometheus)