请选择 进入手机版 | 继续访问电脑版

网赚研究院-致富网赚论坛-网赚宝盒-华夏网赚论坛-28网赚-贵族网赚论坛-日付网赚联盟

 找回密码
 立即注册
查看: 103|回复: 0

渣婚之后19楼 PromQL:拆解CPU利用率古代酱油人生

发表于 2020-1-15 19:05 | 1030 显示全部楼层 |阅读模式

[复制链接]

2万

主题

4万

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
86140
发表于 2020-1-15 19:05 | 显示全部楼层 |阅读模式
这是写在帖子头部的内容PromQL是Prometheus内置的数据查询说话,其供给对时候序列数据丰富的查询,聚合以及逻辑运算本事的支持。而且被普遍利用在Prometheus的一样平常利用傍边,包含对数据查询、可视化、告警处置惩罚傍边,下面我们讲简单了解一下PromQL说话,而且从简单的例子动手。
数据典范

在Prometheus的表达式说话中,任何表达式大要子表达式都可以归为四种典范:

1.instant vector 瞬时向量 :一组时候序列,包含每个时候序列的单个样本,所偶然间序列都同享类似的时候戳。
2.range vector 范围向量 :一组时候序列,包含每个时候序列随时候变化的一系列数据点。
3.scalar 标量 :一个简单的浮点值
4.string 字符串 :一个当前没有被利用的简单字符串


PromQL:拆解CPU利用率  新闻




操纵符

利用PromQL除了可以大要方便的依照查询和过滤时候序列之外,PromQL还支持丰富的操纵符,用户可以利用这些操纵符对进一步的对事变序罗列行二次加工。这些操纵符包含:数学运算符,逻辑运算符,布尔运算符等等。
PromQL支持的全数数学运算符以下所示:

+ (加法)
- (减法)
* (乘法)
/ (除法)
% (求余)
^ (幂运算)
举例说明↓↓↓
例如我们查询主机的内存巨细,返回的是Bytes,假如我要把他转换成G可以利用一下表达式:
node_memory_MemTotal_bytes / 1024 /1024 /1024
返回的结果是一个瞬时向量。两个瞬时向量之间的数学盘算例如:
node_disk_written_bytes_total + node_disk_read_bytes_total
那末我们会发现是按照表达式的标签举行数学运算,别离算出vda、vdb的磁盘io。
Prometheus支持以下布尔运算符以下:

<blockquote>== (相当)
!= (不相当)
> (大于)
< (小于)
>= (大于即是)
0.95
Prometheus 支持以下聚集运算符:

and (而且)
or (大要)
unless (断根)
经过聚集运算,可以在两个瞬时向量与瞬时向量之间举行响应的聚集操纵↓↓↓
vector1 and vector2 会发生一个由 vector1 的元素组成的新的向量。该向量包含 vector1 中完全婚配 vector2 中的元素组成。
vector1 or vector2 会发生一个新的向量,该向量包含 vector1 中全数的样本数据,以及 vector2 中没有与 vector1 婚配到的样本数据。

vector1 unless vector2 会发生一个新的向量,新向量中的元素由 vector1 中没有与 vector2 婚配的元素组成。
优先级

在 Prometheus 系统中,二元运算符优先级从高到低的次第为:
^
*, /, %
+, -
==, !=,
and, unless
or

具有类似优先级的运算符是满足团结律的(左团结)。例如,2 3 % 2 等价于 (2 3) % 2。运算符 ^ 破例,^ 满足的是右团结,例如,2 ^ 3 ^ 2 等价于 2 ^ (3 ^ 2)。
聚合运算

Prometheus还供给了以下内置的聚合操纵符,这些操纵符感化于瞬时向量。可以将瞬时表达式返回的样本数据举行聚合,构成一个新的时候序列。
sum (求和)
min (最小值)
max (最大值)
avg (均匀值)
stddev (标准差)
stdvar (标准不同)
count (计数)
count_values (对value举行计数)
bottomk (后n条时序)
topk (前n条时序)
quantile (散布统计)


PromQL:拆解CPU利用率  新闻




利用聚合操纵的语法以下:
([parameter,] ) [without|by ()]
其中只要count_values, quantile, topk, bottomk支持参数(parameter)。
without用于从盘算结果中移除罗列的标签,而保存此外标签。by则恰好相反,结果向量中只保存列出的标签,此外标签则移除。经过without和by可以按还是本的题目对数据举行聚合。
sum(http_requests_total) without (instance)即是:sum(http_requests_t;otal) by (code,handler,job,method)假如只需要盘算全部利用的HTTP请求总量,可以间接利用表达式:sum(http_requests_total)
查询数据的均匀值:avg(http_requests_total)查询最靠前的3个值:topk(3, http_requests_total)常用函数

Prometheus为差此外数据典范供给了很是多的盘算函数,有个小本事就是碰到counter数据典范,在做任何操纵之前,先套上一个rate()大要increase()函数。下面先容一些比力常用的函数帮助大白:
increase()函数:

该函数配合counter数据典范利用,获得区间向量中的第一个和末端一个样本并返回其增加量。假如除以肯按时候便可以获得该时候内的均匀增加率:


increase(node_cpu_seconds_total[2m]) / 120 #主机节点近来两分钟内的均匀CPU利用率rate()函数:

该函数配合counter典范数据利用,取counter在这个时候段中的均匀每秒增量。
rate(node_cpu_seconds_total[2m]) #间接盘算区间向量在时候窗口内均匀增加速度

PromQL:拆解CPU利用率  新闻




sum()函数:
在现实工作中CPU大多是多核的,而node_cpu会将每个核的数据都零丁表示出来,我们实在不会关注每个核的零丁情况,而是关心总的CPU情况。利用sum()函数举行求和后可以得出一条总的数据,但sum()是将全数呆板的数据都举行了求和,所以还要再利用by (instance)大要by (cluster_name)便可以取出单个办事器大要一组办事器的CPU数据。上面的公式可以进化为:
sum( increase(node_cpu_seconds_total[1m]) ) #先找出每一个,然后再合并Topk()函数:

该函数可以从大量数据中取出排行前N的数值,N可以自界说。比如监控了100台办事器的320个CPU,用这个函数便可以检察当前负载较高的那几个,用于报警:

topk(3, http_requests_total) #统计最靠前的3个值predict_linear()函数:对曲线变化速度举行趟,起到必定的猜测感化。比如当前这1个小时的磁盘可用率急剧下降,这类情况大要致使磁盘很快被写满,这时可以利用该函数,用当前1小时的数据去猜测未来几个小时的状态,实现提早告警:


predict_linear( node_filesystem_free_bytes{mountpoint="/"}[1h],4*3600 ) < 0 #假如未来4小时后磁盘利用率为负数就会报警CPU利用率表达式拆解



1.先把key找出来,比如是为了检察CPU的利用率,那末就应当利用:




node_cpu这个key

2.在node_cpu这个key的底子上把idle的CPU时候和全数CPU时候过滤出来,利用{}做过滤:


node_cpu_seconds_total{ mode=&#39;idle&#39; }  #找出余暇CPU的值node_cpu_seconds_total  #不写其他参数代表ALL

3.利用increase()函数把1分钟的数据抓取出来,这个时候取出来的是每个CPU的数据:


increase(node_cpu_seconds_totalmode=&#39;idle&#39;}[1m])
PromQL:拆解CPU利用率  新闻


increase(node_cpu_seconds_totalmode=&#39;idle&#39;}[1m])

4.利用sum()函数求和每个CPU的数据,获得单唯一个数据:


sum( increase(node_cpu_seconds_total{mode=&#39;idle&#39;}[1m]) )

5.sum()函数固然把每个CPU的数据举行了求和,可是还把每台办事器也举行了求和,全数办事器的CPU数据都类似了,还需要举行一次处置惩罚。这里又引出了一个新函数 by (instance)。它会把sum求和到一路的数值依照指定方式举行拆分,instance代表的是呆板名。假如不写by (instance)的话就需要在{}中写明需要哪个实例的数据。
sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) /sum(increase(node_cpu_seconds_total[1m])) by(instance)

PromQL:拆解CPU利用率  新闻




6.获得CPU余暇时候占比:
sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) /sum(increase(node_cpu_seconds_total[1m])) by(instance)7.CPU的利用率:
1-(sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by(instance) /sum(increase(node_cpu_seconds_total[1m])) by(instance)) * 100
终极盘算大要为负数,大要很多几多granafa模板都这样,当cpu处于多核、低负载的情况下,值的不同会被放大,从而致使出现负数的情况。

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
感激您的阅读
回复

使用道具 举报

0条回复
跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2015 忽悠兄 X3.2 © 2001-2013 Comsenz Inc.

Archiver|手机版|小黑屋| Comsenz Inc.  |网站地图

快速回复 返回顶部 返回列表