prometheus - node_exporter - CPU利用率(入门基础)

一、获取 各种状态 CPU 的使用率

状态有:

  • ​ 所有CPU状态下,每分钟的使用率
  • ​ system下,每分钟的使用率
  • ​ user下,每分钟的使用率
  • ​ idle下,每分钟的使用率

[root@k8s-node1 ~]# curl localhost:9100/metrics | grep -i node_cpu 获取到CPU所有的标签

# TYPE node_cpu_guest_seconds_total counter		#虚拟机的虚拟CPU不用管
node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0
node_cpu_guest_seconds_total{cpu="0",mode="user"} 0
node_cpu_guest_seconds_total{cpu="1",mode="nice"} 0
node_cpu_guest_seconds_total{cpu="1",mode="user"} 0
# HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
# TYPE node_cpu_seconds_total counter			#当前主机的CPU,0,1两核
node_cpu_seconds_total{cpu="0",mode="idle"} 5347.26		#CPU0 的 空闲CPU
node_cpu_seconds_total{cpu="0",mode="iowait"} 12.29		#CPU0 的 io使用量
node_cpu_seconds_total{cpu="0",mode="irq"} 0
node_cpu_seconds_total{cpu="0",mode="nice"} 0.47
node_cpu_seconds_total{cpu="0",mode="softirq"} 2.89		#CPU0 的 中断请求
node_cpu_seconds_total{cpu="0",mode="steal"} 0
node_cpu_seconds_total{cpu="0",mode="system"} 59.93		#CPU0 的 系统使用量
node_cpu_seconds_total{cpu="0",mode="user"} 29.78		#CPU0 的 用户使用量
node_cpu_seconds_total{cpu="1",mode="idle"} 5341.86
node_cpu_seconds_total{cpu="1",mode="iowait"} 12.94		#CPU1 同理
node_cpu_seconds_total{cpu="1",mode="irq"} 0
node_cpu_seconds_total{cpu="1",mode="nice"} 0.47
node_cpu_seconds_total{cpu="1",mode="softirq"} 2.7
node_cpu_seconds_total{cpu="1",mode="steal"} 0
node_cpu_seconds_total{cpu="1",mode="system"} 60.49
node_cpu_seconds_total{cpu="1",mode="user"} 33.22

此处显示的是 node_exporter 针对 CPU 使用情况的所有 key/value 数据。

对 CPU 使用情况进行统计,就是从这些CPU 的 key 当中进行计算,提取,形成统计图。


二、所用函数

1、increase({}[time]) 增量函数

在prometheus 中,用来针对 Counter 这种持续增长的数值,截取其中一段时间的增量。配合时间使用

increase(node_cpu_seconds_total[1m]) 获取了CPU总使用时间在1分钟之内的增量

2、sum() 叠加函数

可以将所有的内容进行合并

3、by () 拆分函数

by( ) 这个函数可以把 sum 合并到一起的数值,按照指定的方式进行拆分。( ) 内 填写它指定的方式

在当前案例,需要按照集群节点进行拆分。所以采用 instance=“机器名”,by(instance)。
在这里插入图片描述

二、计算 CPU 每分钟的 使用率

思路、步骤如下
1.计算CPU的使用时间

空闲CPU使用时间 = node_cpu_seconds_total{mode=“idle”}

CPU总共使用时间 = node_cpu_seconds_total)


2.取一分钟之内的使用增量

空闲CPU一分钟内的增量:increase(node_cpu_seconds_total{mode=“idle”}[1m])

全部CPU一分钟内的增量:increase(node_cpu_seconds_total**[1m]**)


3.因为CPU核心数太多,所以进一步将多核CPU进行合并为一个整体

集群所有主机空闲CPU一分钟内的增量:sum(increase(node_cpu_seconds_total{mode=“idle”}[1m]))

集群所有主机CPU全部使用情况一分钟内的增量:sum(increase(node_cpu_seconds_total[1m]))
在这里插入图片描述

问题:这个CPU监控 采集的是多台服务器的监控数据,怎么但是到了这一步变成了一条线。

原因:因为有sum()函数,默认情况下不管什么内容全部都会进行合并。不光是CPU的核心数,同时把机器也进行合并了。 此时计算的

解决:采用 by()函数,按照主机节点进行拆分,by(instance)


4.每个节点的CPU 1分钟内的使用增量

集群所有节点空闲CPU使用增量:sum(increase(node_cpu_seconds_total{mode=“idle”}[1m])) by(instance)

集群所有节点全部状态CPU使用增量:sum(increase(node_cpu_seconds_total[1m]))by(instance)


5.根据使用增量,计算CPU每分钟利用率

公式:节点非空闲CPU每分钟的增量 / 节点全部状态下CPU每分钟的增量 * 100= CPU每分钟的利用率

节点非空闲CPU每分钟增量 = 1 - 节点空闲CPU每分钟增量
1 - (sum(increase(node_cpu_seconds_total{mode=“idle”}[1m])) by(instance))


6. 完整公式

(1-(sum(increase(node_cpu_seconds_total{mode=“idle”}[1m]))by(instance)) / (sum(increase(node_cpu_seconds_total[1m]))by(instance))) *100
在这里插入图片描述
在这里插入图片描述

三、举一反三、统计 CPU 其他状态的 每分钟利用率

1.计算 CPU-system 每分钟使用率
(sum(increase(node_cpu_seconds_total{mode='system'}[1m]))by(instance)) / (sum(increase(node_cpu_seconds_total[1m]))by(instance))  *100
2.计算 CPU-user 每分钟利用率
(sum(increase(node_cpu_seconds_total{mode='user'}[1m]))by(instance)) / (sum(increase(node_cpu_seconds_total[1m]))by(instance))  *100
3.计算 idle(空闲)CPU 每分钟占多少利用率
(sum(increase(node_cpu_seconds_total{mode='idle'}[1m]))by(instance)) / (sum(increase(node_cpu_seconds_total[1m]))by(instance))  *100
  • 13
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值