はじめに

PromQL の基本に関する実践的なラボへようこそ。Prometheus は強力なオープンソースの監視およびアラートツールキットであり、そのクエリ言語である PromQL はその力の中心です。PromQL を使用すると、時系列データをリアルタイムで選択および集計できます。

このラボでは、Node Exporter からメトリクスを積極的に収集している Prometheus サーバーで構成された、事前に設定された環境で作業します。目標は、PromQL の基本的な構文を使用してこのデータをクエリする方法を学ぶことです。簡単なメトリクス選択から始め、関数やフィルターを使用したより高度なクエリに進みます。

提供された環境の理解

このステップでは、ラボ環境に慣れていただきます。セットアッププロセスにより、すでに 2 つの Docker コンテナが起動しています。セットアップ作業は不要です。

2 つのコンテナは以下の通りです。

  • node-exporter: このコンテナは、実行されているホストマシンから、ハードウェアおよびカーネル関連の幅広いメトリクスを公開する目的を持っています。
  • prometheus: これは Prometheus サーバー自体です。node-exporter からメトリクスを「スクレイプ」(収集)し、時系列データベースに保存するように設定されています。

ターミナルで docker ps コマンドを実行することで、両方のコンテナが実行されていることを確認できます。

docker ps

以下のような出力が表示され、prometheus および node-exporter コンテナが「Up」ステータスでリストされているはずです。

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS         PORTS                                       NAMES
486db39ca176   prom/prometheus      "/bin/prometheus --c…"   9 seconds ago    Up 8 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus
3f02110c8fde   prom/node-exporter   "/bin/node_exporter"     11 seconds ago   Up 8 seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter

これにより、監視スタックの準備が整ったことが確認できます。次のステップでは、Prometheus のユーザーインターフェースにアクセスして、これらのメトリクスのクエリを開始します。

Prometheus UI で Expression Browser にアクセスする

このステップでは、Prometheus の Web UI にアクセスし、PromQL クエリを実行するための主要なツールである Expression Browser を見つけます。

Prometheus コンテナの Web サーバーはポート 9090 で実行されており、ラボ環境ではこれが自動的にアクセス可能になっています。

  1. LabEx インターフェースの + ボタンをクリックし、Web Service を選択します。
  2. ポートに 9090 を入力し、表示される新しいタブを開きます。

これにより、ラボ環境内の別のタブで Prometheus UI が開きます。デフォルトでは、Graph ページに表示されます。このページには、Expression というラベルが付いたテキスト入力フィールドがあります。これが Expression Browser であり、このラボのすべての PromQL クエリを入力して実行する場所です。

Prometheus Expression Browser

クエリを実行する場所がわかったので、最初のクエリを作成する準備ができました。

node_cpu_seconds_total のような基本的なクエリを実行する

このステップでは、メトリクスを選択するための最初の基本的な PromQL クエリを実行します。PromQL で最も単純なクエリは、メトリクスの名前だけです。これにより、このメトリクス名を持つすべての時系列が選択されます。

前のステップで開いた Prometheus UI の Expression Browser に移動します。

  1. Expression 入力フィールドに、次のメトリクス名を入力します。
node_cpu_seconds_total
  1. Execute ボタンをクリックします。

実行後、グラフの下にある Table ビューの結果を確認します。時系列のリストが表示されます。

node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="idle"}      3456.78
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="iowait"}    12.34
node_cpu_seconds_total{cpu="0", instance="node-exporter:9100", job="node", mode="system"}    56.78
...

この結果を分解してみましょう。

  • node_cpu_seconds_total: これはメトリクスの名前です。CPU がさまざまなモードで費やした合計秒数を追跡する counter を表します。
  • {cpu="0", mode="idle", ...}: これらはラベルです。ラベルは、時系列を一意に識別するキーと値のペアです。ここでは、各 CPU コア (cpu="0") と各モード (mode="idle", mode="system" など) の異なる系列を確認できます。
  • 3456.78: これは、その特定の時系列に対して記録された最新の値です。カウンターであるため、この値は時間とともに増加するだけです。

注意: 最新の値が表示されない場合は、ページ右隅の Labby ダイアログボックスをクリックして一時的に閉じます。

特定のメトリクスのすべての時系列に対して Prometheus を正常にクエリできました。

rate 関数とラベルフィルターを適用する

このステップでは、ラベルフィルターと rate() 関数を使用してクエリを絞り込み、より意味のあるデータを取得します。カウンターの生の数値はしばしば有用ではなく、通常は変化率に関心があります。

まず、結果をフィルターして idle モードで費やされた CPU 時間のみを表示します。これは、クエリに波括弧 {} でラベルセレクターを追加することで実行できます。

  1. Expression Browser に次のクエリを入力して実行します。
node_cpu_seconds_total{mode="idle"}

このクエリは、mode ラベルが正確に idle である時系列のみを返します。

次に、このカウンターの変化率を秒単位で計算しましょう。これには rate() 関数を使用します。rate() 関数は、どの期間でレートを計算するかを知る必要があります。これは range vector selector で指定します。例えば、過去 5 分間を [5m] とします。

  1. 次に、クエリを rate() 関数でラップし、5 分間の範囲セレクターを追加するようにクエリを変更します。最終的なクエリを実行します。
rate(node_cpu_seconds_total{mode="idle"}[5m])

この高度なクエリを分解してみましょう。

  • node_cpu_seconds_total{mode="idle"}: これは、目的のメトリクスとラベルをフィルターする instant vector selector です。
  • [5m]: これは range selector であり、Prometheus に選択された時系列の過去 5 分間のすべてのデータポイントを取得するように指示します。
  • rate(...): これは、5 分間のデータ範囲を取得し、カウンターが増加した平均秒間レートを計算する関数です。

結果はもはや大きなカウンター値ではなく、通常は 0 から 1 の間の値(単一の CPU コアの場合)になります。0.95 という値は、過去 5 分間、CPU は平均して 95% アイドル状態であったことを意味します。これは、監視にとってより有用な情報です。

まとめ

PromQL の基本に関するこの実験を完了したこと、おめでとうございます!ライブの Prometheus インスタンスに対してクエリを実行し、生のデータを意味のある情報に変換することに成功しました。

この実験では、以下の方法を学びました。

  • Prometheus UI から Expression Browser への移動方法。
  • メトリクスのすべての時系列を選択するための基本的なクエリの実行方法。
  • 時系列の構造(メトリクス名と一意のラベルセットを含む)の理解。
  • ラベルセレクター ({...}) を使用した時系列のフィルター方法。
  • カウンターの変化率を rate() 関数と範囲ベクトルセレクター ([5m]) を使用して計算する方法。

これらは Prometheus を扱うための基本的な構成要素です。ここから、PromQL が提供する他の多くの関数や演算子を探索して、強力で洞察に富んだ監視ダッシュボードやアラートを構築できます。