5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Prometheus: CPU、メモリ、ディスクの使用率の算出方法+Grafanaでの算出方法

Posted at
実施環境:
Linux
[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

0. 概要

サーバのリソースの使用状況を確認しようと思ったとき、どのようなパラメータを使用するでしょうか。
環境や用途によっても異なりますが、特に頻繁に使用するのは「 CPU 使用率」「メモリ使用率」「ディスク使用率」の3つではないでしょうか。

Prometheus でも、当然これらは確認できます。
ですが実は Prometheus はこれらそのもののパラメータは取得しておらず、他のパラメータから少々加工する必要があります。
今回はその算出方法を、 Prometheus の画面と Prometheus のデータを連携した Grafana の画面の2つの画面について確認していきます。

なお、今回使用するパラメータは、いずれも node_exporter で取得できるパラメータです。
また、値は百分率(%値)で算出します。

1. CPU

1.1. 使用するパラメータ

CPU の使用率を算出するのに使用するパラメータは、「 node_cpu_seconds_total 」です。
このパラメータには、 Prometheus の起動時から現在までのモードごとの CPU の使用秒数の累計値が格納されています。

WS000804.JPG

このパラメータで重要な構成要素は以下の通りです。

項目名 概要
cpu CPU のコア番号。
instance インスタンス名。複数サーバを監視している場合などは気を付ける必要がある。
mode CPU の状態。特に idle の場合が重要(後述)。
1.2. CPU 使用率( Prometheus )

CPU 使用率の算出方法はいくつかありますが、そのうちの1つが以下の式です。

Prometheus
avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) * -100 + 100

WS000805.JPG

式について、1つずつ説明していきます。

node_cpu_seconds_total については、先ほど見た通りです。

{mode="idle"} で、モードが idle (実行する処理がなく、 CPU が待機状態になっている時間)のデータのみを抽出します。
ここから、 CPU が使用「されていない」率をまず算出し、そこから CPU 使用率を求めていくことになります。

rate(...[1m]) は Prometheus の関数で、[]に指定した期間(ここでは1m=1分)で値が1秒あたりどれだけ増加したかを計算します。
node_cpu_seconds_total は先ほど見た通り CPU の使用秒数の「累計値」なので、この rate 関数を node_cpu_seconds_total に用いれば CPU が使用「されていない」時間の割合が算出できます。

WS000840.JPG

さて、これで CPU が使用「されていない」率が算出されたわけですが、上で見た通り node_cpu_seconds_total は CPU のコアごとに値が格納されています。
今回は全体の CPU 使用率がほしいので、 avg(...) で全コアの平均値を出します。

最後に、 * -100 + 100 を付与して、 100% - CPU が使用「されていない」率 = CPU 使用率を算出します。

1.3. CPU 使用率( Grafana )

さて、ここまで Prometheus の画面で見てきたわけですが、 Prometheus と Grafana を連携していれば、同じものが Grafana からも確認できます。

今回 Grafana で値を確認するには Explore 画面を使用します。
Explore 画面はダッシュボードなどを作らずともその場でデータを検索できる画面です。
メニューから「 Explore 」を選択してください。

WS000814.JPG

使用するデータソースは「 Prometheus 」を選択してください。

WS000836.JPG

まずは、 GUI を駆使して算出してみましょう。

Metric に「 node_cpu_seconds_total 」を指定します。

WS000815.JPG

WS000817.JPG

次に、 Label filters に「 mode = idle 」を指定します。

WS000817.JPG

WS000818.JPG

ここから、検索されたデータを加工していきます。
「 Operations 」を押してください。

WS000818.JPG

データの加工方法のリストが出てきますので、「 Range functions 」⇒「 Rate 」を選択します。

111.png

「 Range 」に「 1m 」を指定します。

WS000820.JPG

WS000821.JPG

再度、「 Operations 」を押してください。

WS000821.JPG

今度は「 Aggregations 」⇒「 Avg 」を選択します。

112.png

WS000822.JPG

再び、「 Operations 」を押します。

WS000822.JPG

次は、「 Binary operations 」⇒「 Multiply by scalar 」を選びます。

113.png

Value には「 -100 」を入力します。

WS000823.JPG

WS000824.JPG

最後にもう1度、「 Operations 」を押します。

WS000824.JPG

「 Binary operations 」⇒「 Add scalar 」を選びます。

114.png

Value には「 100 」を入力します。

WS000825.JPG

WS000826.JPG

これでクエリが作れましたので、あとは検索範囲を指定して「 Run query 」を押せば、 CPU 使用率が表示できます。

WS000828.JPG

WS000829.JPG

と、ここまで GUI で地道にクエリを作ってみましたが、実は「 Code 」を押せば式を直接入力できるので、式がわかっているならこちらの方が早いです。

WS000830.JPG

WS000831.JPG

2. メモリ

2.1. 使用するパラメータ

メモリの使用率を算出するのに使用するパラメータは、「 node_memory_MemTotal_bytes 」と「 node_memory_MemAvailable_bytes 」の2つです。
「 node_memory_MemTotal_bytes 」はメモリの総容量バイト数を、「 node_memory_MemAvailable_bytes 」はメモリの空き容量バイト数を表しています。

WS000807.JPG

WS000808.JPG

これらのパラメータで重要な構成要素は以下の通りです。

項目名 概要
instance インスタンス名。複数サーバを監視している場合などは気を付ける必要がある。
2.2. メモリ使用率( Prometheus )

メモリ使用率の算出方法はいくつかありますが、そのうちの1つが以下の式です。

Prometheus
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * -100 + 100

WS000809.JPG

こちらはあまり複雑ではありません。
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes で空き容量 ÷ 総容量 = 空き容量の割合を計算し、 * -100 + 100 で 100% - 空き容量の割合 = 使用率を算出しています。

2.3. メモリ使用率( Grafana )

上記の式は2つのパラメータから値を計算していますが、このようなクエリを Grafana の GUI で作ろうとすると非常に面倒なので、 Code で素直に上の式を直接入力してしまった方がよいです。

WS000832.JPG

WS000833.JPG

3. ディスク

3.1. 使用するパラメータ

ディスクの使用率を算出するのに使用するパラメータは、「 node_filesystem_size_bytes 」と「 node_filesystem_avail_bytes 」の2つです。
「 node_filesystem_size_bytes 」はディスクの総容量バイト数を、「 node_filesystem_avail_bytes 」はディスクの空き容量バイト数を表しています。

WS000810.JPG

WS000811.JPG

これらのパラメータで重要な構成要素は以下の通りです。

項目名 概要
instance インスタンス名。複数サーバを監視している場合などは気を付ける必要がある。
device デバイス名。
mountpoint デバイスが紐づけられているディレクトリ名。
3.2. ディスク使用率( Prometheus )

ディスク使用率の算出方法はいくつかありますが、そのうちの1つが以下の式です。

Prometheus
node_filesystem_avail_bytes / node_filesystem_size_bytes * -100 + 100

WS000812.JPG

こちらもあまり複雑ではありません。
node_filesystem_avail_bytes / node_filesystem_size_bytes で空き容量 ÷ 総容量 = 空き容量の割合を計算し、 * -100 + 100 で 100% - 空き容量の割合 = 使用率を算出しています。

3.3. ディスク使用率( Grafana )

こちらの式も2つのパラメータから計算しており Grafana の GUI で作ろうとすると非常に面倒なので、 Code で式を直接入力してしまった方がよいです。

WS000834.JPG

WS000835.JPG

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?