はじめに
この実験では、監視対象を外部サービスに拡張します。ハードウェアおよび OS のメトリクスを収集する Prometheus エクスポーターである Node Exporter をセットアップします。セットアップには、前回の実験で実行した Prometheus コンテナを使用します。Node Exporter コンテナを実行し、prometheus.ymlに新しいターゲットとして追加します。この実験の終わりには、Prometheus UI 内でホストレベルのシステムメトリクスをクエリできるようになります。
Node Exporter Docker イメージをプルする
このステップでは、Node Exporter の公式 Docker イメージをダウンロードします。Node Exporter は、ホストマシンから幅広いハードウェアおよびカーネル関連のメトリクスを公開する Prometheus エクスポーターです。
開始するには、Docker Hub からprom/node-exporterイメージをプルします。ターミナルを開き、以下のコマンドを実行します。
docker pull prom/node-exporter
このコマンドは Docker Hub レジストリに接続し、Node Exporter イメージの最新バージョンをローカルマシンにダウンロードします。イメージの各レイヤーのダウンロード進捗を示す出力が表示されます。
期待される出力:
Using default tag: latest
latest: Pulling from prom/node-exporter
Digest: sha256:a5579e72377a6053359058893b80f4f47c55d761457d685343b8e797859a159b
Status: Image is up to date for prom/node-exporter
docker.io/prom/node-exporter
ポート 9100 で Node Exporter コンテナを実行する
イメージが準備できたので、Node Exporter をコンテナとして実行しましょう。メトリクスは、Node Exporter のデフォルトポートであるポート9100で公開します。
コンテナを開始し、Prometheus と同じ Docker ネットワークに配置するために、以下のコマンドを実行します。
docker run -d -p 9100:9100 --name node-exporter --network monitoring prom/node-exporter
このコマンドの内訳を見てみましょう。
-d: コンテナをデタッチモードで実行します。これは、バックグラウンドで実行されることを意味します。-p 9100:9100: ホストのポート9100をコンテナのポート9100にマッピングします。--name node-exporter: コンテナに覚えやすい名前を付け、参照しやすくします。prom/node-exporter: コンテナ作成に使用するイメージです。
docker psコマンドでコンテナが実行されていることを確認できます。
docker ps
実行中のコンテナのリストにnode-exporterが表示されるはずです。オプションで、以下のコマンドを使用してネットワークへのアタッチを確認できます。
docker inspect node-exporter --format '{{.HostConfig.NetworkMode}}'
出力はmonitoringになるはずです。
期待される出力:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... prom/node-exporter "/bin/node_exporter" A few seconds ago Up a few seconds 0.0.0.0:9100->9100/tcp, :::9100->9100/tcp node-exporter
... prom/prometheus "/bin/prometheus --c…" About a minute ago Up about a minute 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp prometheus
prometheus.yml を更新して Node Exporter ターゲットを追加する
このステップでは、新しく実行した Node Exporter コンテナからメトリクスをスクレイピングするように Prometheus を設定します。これは、新しいスクレイプジョブを追加するためにprometheus.yml設定ファイルを編集することで行います。
まず、nanoエディタを使用してプロジェクトディレクトリにあるprometheus.ymlファイルを開きます。
nano ~/project/prometheus.yml
次に、scrape_configsセクションの下に Node Exporter の新しいジョブ設定を追加します。最終的なファイルは以下のようになります。YAML はインデントに敏感なので、インデントが正しいことを確認してください。
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["prometheus:9090"]
- job_name: "node_exporter"
static_configs:
- targets: ["node-exporter:9100"]
新しいブロックの機能は以下の通りです。
job_name: 'node_exporter': このスクレイプジョブに名前を付けます。収集されたメトリクスにラベルとして使用されます。targets: ['node-exporter:9100']: Prometheus に Node Exporter の場所を伝えます。コンテナ名を使用するのは、Docker が同じネットワーク上のコンテナ間で内部 DNS 解決を提供するためです。localhostホスト名は各コンテナにスコープされているため、他のコンテナに到達するために使用することはできません。
編集後、Ctrl+X、次にY、そしてEnterを押してファイルを保存し、nanoを終了します。
更新された設定で Prometheus コンテナを再起動する
Prometheus が新しい設定を読み込むためには、そのコンテナを再起動する必要があります。以前に設定したボリュームマウントにより、再起動時にコンテナは更新されたprometheus.ymlファイルを確認できます。
以下のコマンドを実行して Prometheus コンテナを再起動します。
docker restart prometheus
このコマンドは、prometheusという名前のコンテナを正常に停止してから開始します。数秒後、Prometheus は新しい設定で実行されます。
それでは、Prometheus UI での変更を確認しましょう。
- LabEx インターフェースで、
+(新規タブ)ボタンをクリックし、Web Serviceを選択して、ポートに9090を入力します。 - 新しいタブが開いたら、Prometheus Expression Browser のランディングページが表示されるはずです。
- 上部のナビゲーションバーにある「Status」メニューをクリックし、「Targets」を選択します。

現在、「prometheus」と「node_exporter」の 2 つのターゲットがリストされているはずです。どちらも「UP」の状態であるべきです。これは、Prometheus が自身と Node Exporter の両方から正常にメトリクスをスクレイピングしていることを示しています。
UI で node_cpu_seconds_total メトリックをクエリする
最後のステップは、クエリを実行して Prometheus が Node Exporter からメトリクスを正常に取り込んでいることを確認することです。
ナビゲーションバーの「Graph」リンクをクリックして、Prometheus UI のメインの「Graph」ページに戻ります。「Expression」入力フィールドに、次のメトリクス名を入力します。
node_cpu_seconds_total
このメトリクスは、CPU が様々なモード(例:アイドル、ユーザー、システム)で費やした合計時間(秒単位)を表します。

「Execute」ボタンをクリックします。接続が成功した場合、グラフの下に結果のテーブルが表示されます。各結果は、異なる CPU コアとモードに対応しています。これらの結果が表示されることは、Node Exporter によるデータ収集から Prometheus による取り込みと保存まで、監視パイプライン全体が正しく機能していることを確認します。
データを視覚化するために、「Table」ビューと「Graph」ビューを切り替えることができます。
まとめ
おめでとうございます!外部サービスを追加して、監視セットアップを正常に拡張しました。この実験では、公式の Prometheus Node Exporter を Docker コンテナで実行する方法、この新しいターゲットからメトリクスをスクレイピングするように Prometheus インスタンスを設定する方法、そしてホストレベルのメトリクスをクエリしてデータ収集を検証する方法を学びました。これは、包括的なオブザーバビリティスタックを構築するための基本的なスキルであり、システムのパフォーマンスとヘルスに関する深い洞察を得ることができます。



