はじめに

Prometheus は、強力なオープンソースの監視およびアラートツールキットです。その動作は、通常 prometheus.yml という名前の構成ファイルによって制御されます。このファイルは、メトリクスをスクレイピングする頻度、スクレイピングするターゲット、アラートルールをどのように処理するかなど、すべてを定義します。

この実験 (Lab) は、「Prometheus のインストール」実験 (Lab) の続きです。そこでは、Docker を使用して Prometheus をインストールして実行する方法を学びました。Prometheus を起動して実行する方法がわかったので、この実験 (Lab) では Prometheus の構成の基本を学びます。まず、デフォルトの構成で実行されている Prometheus コンテナを検査することから始めます。次に、独自のカスタム prometheus.yml ファイルを作成し、このファイルを使用して新しいコンテナを起動し、サービスを再起動せずに構成をリロードする方法を学びます。

Prometheus コンテナが実行中であることを確認する

このステップでは、セットアップスクリプトによって開始された最初の Prometheus コンテナが実行中であることを確認します。このコンテナは、デフォルトの組み込み構成を使用しています。

実行中のすべての Docker コンテナを一覧表示して、prometheus-default コンテナを確認しましょう。

docker ps

以下のような出力が表示され、prometheus-default という名前のコンテナが起動して実行されていることが確認できるはずです。PORTS 列は、ホストのポート 9090 がコンテナのポート 9090 にマッピングされていることを示しています。

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a1b2c3d4e5f6   prom/prometheus     "/bin/prometheus --c…"   15 seconds ago   Up 14 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus-default

これにより、最初の Prometheus インスタンスがアクティブであることが確認できました。次のステップでは、Prometheus の Web UI にアクセスして、デフォルトの構成が機能している様子を確認します。

localhost:9090 で Prometheus Web UI にアクセスする

このステップでは、現在実行中でポート 9090 で公開されている Prometheus の Web インターフェースにアクセスします。LabEx 環境は、仮想マシン内で実行されている Web サービスにアクセスするための便利な方法を提供します。

ラボインターフェースの上部にある + (新規タブ) ボタンをクリックします。

Web Service オプションを選択し、ポートとして 9090 を入力します。

これにより、ラボ環境で実行されているサービスに接続された新しいブラウザタブが開きます。

ポート 9090 をマッピングしたため、Prometheus UI が利用可能になります。Prometheus Expression Browser、つまりメインのランディングページが表示されるはずです。このインターフェースを使用すると、PromQL クエリを作成して実行し、メトリクスを探索できます。

Prometheus Expression Browser landing page

このページが表示されることは、Prometheus コンテナが正しく実行されており、アクセス可能であることを確認します。

基本的なスクレイプ設定を含む prometheus.yml ファイルを作成する

このステップでは、prometheus.yml という名前のカスタム Prometheus 設定ファイルを作成します。このファイルは、Prometheus に何を監視するかを指示します。

Prometheus Web UI にアクセスし、正常に動作していることを確認したので、ニーズに合わせて Prometheus を設定するために使用できるカスタム設定ファイルを作成しましょう。

nano テキストエディタを使用して、~/project ディレクトリにファイルを作成します。

nano prometheus.yml

次に、以下の YAML 設定を nano エディタにコピー&ペーストします。この設定は、Prometheus が 5 秒ごとに自身のメトリクスをスクレイプするように指示します。

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

この設定について説明します。

  • global: このセクションは、他のすべての設定セクションに有効なパラメータを定義します。
  • scrape_interval: これは、スクレイプ間のデフォルトの間隔を 5 秒に設定します。
  • scrape_configs: このセクションは、スクレイピングのターゲットとパラメータのセットを定義します。
  • job_name: これはジョブに割り当てられた名前で、このターゲットからスクレイプされたすべての時系列にラベルとして付加されます。
  • static_configs: これは監視対象のターゲットのリストを指定します。
  • targets: これはスクレイプするエンドポイントのリストです。この場合、Prometheus サーバー自体です。

コンテンツを貼り付けたら、ファイルを保存し、Ctrl+XY、そして Enter を押して nano を終了します。

設定をマウントして Prometheus コンテナを実行する

カスタム prometheus.yml ファイルが作成されたので、それを使用する新しい Prometheus コンテナを実行する必要があります。まず、古いコンテナを停止して削除します。

docker stop prometheus-default
docker rm prometheus-default

次に、prometheus-custom という名前の新しいコンテナを起動します。-v フラグを使用して、ローカルの prometheus.yml ファイルをコンテナ内の期待される場所 /etc/prometheus/prometheus.yml にマウントします。また、次のステップで使用するホットリロード API を有効にするために --web.enable-lifecycle フラグを追加します。

docker run -d \
  --name prometheus-custom \
  -p 9090:9090 \
  -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --web.enable-lifecycle

新しいフラグを確認しましょう。

  • -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml: これはボリュームマウントです。ホストマシンの ~/project ディレクトリにある prometheus.yml ファイルを、コンテナ内の /etc/prometheus/prometheus.yml パスにマッピングします。Prometheus は起動時にこのファイルを読み込みます。
  • --web.enable-lifecycle: このコマンドラインフラグは、設定をリロードするための HTTP API を有効にします。これは /-/reload エンドポイント経由でアクセスできます。

新しいコンテナが実行されていることを確認できます。

docker ps

リストに prometheus-custom コンテナが表示されるはずです。

API 経由で Prometheus 設定をリロードする

Prometheus の強力な機能の 1 つは、メトリクス収集の中断を防ぎながら、フルリスタートなしで設定をリロードできることです。これは、--web.enable-lifecycle フラグでライフサイクル API を有効にしたため可能です。

まず、設定ファイルを変更します。scrape_interval5s から 15s に変更します。

nano でファイルを開きます。

nano prometheus.yml

scrape_interval の行を 15s に変更します。

global:
  scrape_interval: 15s ## 5s から変更

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

ファイルを保存して nano を終了します (Ctrl+XYEnter)。

次に、コンテナを再起動する代わりに、curl を使用して /-/reload エンドポイントに POST リクエストを送信します。これにより、実行中の Prometheus インスタンスに、マウントされたファイルから設定をリロードするように指示します。

curl -X POST http://localhost:9090/-/reload

リロードが成功した場合、出力は表示されません。このサイレントな成功は、Prometheus が新しい設定を適用したことを意味します。

Targets ページでスクレイプされたメトリクスを確認する

この最終ステップでは、Prometheus Web UI を確認することで、カスタム設定が有効になっていることを検証します。

LabEx 環境では、「Web Terminal」タブ、または VM 内で実行されている Web サービスにアクセスするための同様のメカニズムが提供されます。ラボインターフェースによって提供されるブラウザで http://localhost:9090 に移動して、Prometheus UI を開きます。

UI がロードされたら、トップナビゲーションバーの Status メニューをクリックし、次に Targets を選択します。

Targets ページには、prometheus.yml ファイルで定義されたスクレイプターゲットが表示されます。prometheus ジョブの下に 1 つのターゲットが表示されるはずです。

  • Endpoint: http://localhost:9090/metrics
  • State: 状態は緑色の背景で UP になっているはずです。
  • Last Scrape / Scrape Duration: これらの列は、最後のスクレイプが発生した時間と、それに要した時間を示します。スクレイプ間の時間が約 15 秒になっていることがわかります。これは、前のステップでリロードした変更を反映しています。
Prometheus Targets Page

これにより、Prometheus がカスタム設定ファイルを正常にロードし、指定されたターゲットをスクレイプし、設定リロードを適用したことが確認できます。

まとめ

おめでとうございます!Prometheus 設定に関するこの実験を無事に完了しました。

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

  • カスタム prometheus.yml 設定ファイルを作成する。
  • Docker ボリュームマウント (-v) を使用して、Prometheus コンテナにカスタム設定を提供する。
  • Prometheus ライフサイクル API を有効にして、ホットリロードを可能にする。
  • 簡単な curl コマンドを使用して、Prometheus 設定をオンザフライでリロードする。
  • Prometheus Web UI の Targets ページを確認して、アクティブな設定を検証する。

これらは、あらゆる環境で Prometheus を管理および運用するための基本的なスキルです。