普罗米修斯:计算CPU、内存、磁盘使用率的方法+通过Grafana进行计算的方法
只需要一个选项,将以下内容用中文进行释义:
实施环境:
[root@testhost ~]# uname -a
Linux testhost 4.18.0-448.el8.x86_64 #1 SMP Wed Jan 18 15:02:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
[root@testhost ~]# cat /etc/redhat-release
CentOS Stream release 8
[root@testhost ~]# yum list installed | grep grafana
grafana-enterprise.x86_64 10.0.3-1
Prometheus: 2.46.0.linux-amd64
Node_exporter: 1.6.1.linux-amd64
普罗米修斯:2.46.0.linux-amd64
节点导出器:1.6.1.linux-amd64
摘要
当想要了解服务器资源的使用情况时,应该使用哪些参数呢?
虽然会受到环境和用途的影响,但特别常用的参数应该是「CPU使用率」、「内存使用率」和「磁盘使用率」这三个,不是吗?
不过,实际上 Prometheus 并没有获得这些参数本身,而是需要从其他参数进行一些处理。
本次我们将会确认 Prometheus 和 Grafana 的两个界面,即 Prometheus 界面和与 Prometheus 数据协作的 Grafana 界面的计算方法。
另外,本次使用的参数都是可以通过node_exporter获取的参数。
此外,这些值将以百分比(%值)的形式计算。
1. 处理器
1.1. 使用的参数
用于计算 CPU 使用率的参数是 “node_cpu_seconds_total”。该参数保存了从 Prometheus 启动到当前时刻的每个模式下的 CPU 使用秒数的累计值。

根据这些参数,重要的构成要素如下。
1.2. Prometheus 监测 CPU 的利用率
有几种计算CPU使用率的方法,其中之一是以下公式。
avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) * -100 + 100

关于该式,我会逐个进行解释。
关于 node_cpu_seconds_total 的情况如同之前所见。
在“待机”模式下,仅提取处于待机状态的数据(即没有执行任务,CPU处于等待状态)。然后,首先计算CPU未被使用的比例,然后再计算CPU使用率。
rate(…[1m]) 是 Prometheus 的函数,用于计算在指定的时间段(这里是1m=1分钟)内值每秒增加了多少。
node_cpu_seconds_total 是我们刚才看到的 CPU 使用时间的“累计值”,所以如果我们将 rate 函数应用于 node_cpu_seconds_total,我们就可以计算出 CPU 未被使用的时间的比例。

现在,已经计算出了 CPU 的未使用率,但正如之前所述,node_cpu_seconds_total 的值是按照每个 CPU 核心存储的。
因为我们想要获取整体的 CPU 使用率,所以我们使用 avg(…) 来获得所有核心的平均值。
最后,我们将 ” – 100 + 100 ” 添加到 CPU 未使用的百分比上,以计算 CPU 使用率。
1.3. CPU 使用率(Grafana)
好的,现在我们来看看 Prometheus 的界面。如果 Prometheus 和 Grafana 进行了连接,那么你也可以通过 Grafana 来查看相同的内容。
请使用Explore画面在Grafana中查看值。
Explore画面是一个可以在不创建仪表板等的情况下即时搜索数据的界面。
请从菜单中选择“Explore”。

请选择“Prometheus”作为数据源。

首先,让我们充分利用图形用户界面来进行计算。
在Metric中指定”node_cpu_seconds_total”。


接下来,将在 Label filters 中指定“mode = idle”。


请点击“操作”,从这里开始处理搜索到的数据。

当出现数据处理方法列表时,请选择“范围函数”→“比率”。

将「范围」指定为「1m」。


请再次点击“操作”。

这次选择“Aggregations”⇒“Avg”。


再次点击“操作”。

下一个选项是“二进制运算”,我们选择“乘以标量”。

对于”Value”,输入”-100″。


最后再按一次「操作」按钮。

选择「加法运算」选项。

在“Value”中输入“100”。


只需指定搜索范围,然后点击“运行查询”即可显示CPU使用率。


实际上,您可以直接在“Code”按钮处输入表达式,因此如果您理解了表达式,这种方法会更快。


2. 存储
2.1. 使用的参数
计算内存使用率所使用的参数是 “node_memory_MemTotal_bytes” 和 “node_memory_MemAvailable_bytes” 这两个。”node_memory_MemTotal_bytes” 表示内存的总容量字节数,而 “node_memory_MemAvailable_bytes” 表示内存的可用容量字节数。


以下是这些参数的重要构成要素。
2.2. 内存使用率(Prometheus)
计算内存使用率的方法有多种,其中之一如下所示的公式。
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * -100 + 100

这里并不是很复杂。我们通过将节点的可用内存字节数除以节点的总内存字节数来计算剩余容量占总容量的比例,并用 * -100 + 100 的方式计算出 100% 减去剩余容量的比例,得到使用率。
2.3. 儲存利用率 (Grafana)
在Grafana的GUI中尝试创建这样的查询非常麻烦,因此最好直接使用代码将上述公式直接输入。该公式从两个参数计算值。


3. 光盘
3.1. 使用参数
用于计算磁盘使用率的参数有两个,分别是「 node_filesystem_size_bytes 」和「 node_filesystem_avail_bytes 」。
「 node_filesystem_size_bytes 」表示磁盘的总容量字节数,「 node_filesystem_avail_bytes 」表示磁盘的可用容量字节数。


这些参数中的重要构成要素如下:
3.2. 磁盘使用率 (Prometheus)
计算磁盘使用率的方法有几种,其中之一是以下等式。
node_filesystem_avail_bytes / node_filesystem_size_bytes * -100 + 100

这也不是太复杂。
我们通过使用 node_filesystem_avail_bytes / node_filesystem_size_bytes,计算出可用空间与总容量的比例,然后用 * -100 + 100 的方式计算得出使用率,即用 100% 减去空闲空间的比例。
3.3. 硬盘使用率(Grafana)
这个方程式也是从两个参数计算出来的,如果在 Grafana 的图形界面中创建的话会非常麻烦,所以最好直接在代码中输入方程式。

