ファイルベースのサービスディスカバリを使用してスクレイプターゲットを検出する

Prometheusは、スクレイプターゲットを検出するためのさまざまなサービスディスカバリオプションを提供しています。これには、KubernetesConsulなど、他の多くのオプションが含まれます。現在サポートされていないサービスディスカバリシステムを使用する必要がある場合、ユースケースにはPrometheusのファイルベースのサービスディスカバリメカニズムが最適です。これにより、JSONファイルにスクレイプターゲットを(それらのターゲットに関するメタデータとともに)一覧表示できます。

このガイドでは、次のことを行います。

  • Prometheus ノードエクスポーターをローカルにインストールして実行する
  • ノードエクスポーターのホストとポート情報を指定する `targets.json` ファイルを作成する
  • `targets.json` ファイルを使用してノードエクスポーターを検出するように設定されたPrometheusインスタンスをインストールして実行する

ノードエクスポーターのインストールと実行

ノードエクスポーターを使用したLinuxホストメトリクスの監視ガイドのこのセクションを参照してください。ノードエクスポーターはポート9100で実行されます。ノードエクスポーターがメトリクスを公開していることを確認するには

curl http://localhost:9100/metrics

メトリクスの出力は次のようになります。

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
...

Prometheusのインストール、設定、および実行

ノードエクスポーターと同様に、Prometheusはtarball経由でインストールできる単一の静的バイナリです。プラットフォーム用の最新リリースをダウンロードして、tarを展開します。

wget https://github.com/prometheus/prometheus/releases/download/v*/prometheus-*.*-amd64.tar.gz
tar xvf prometheus-*.*-amd64.tar.gz
cd prometheus-*.*

展開されたディレクトリには、`prometheus.yml` 設定ファイルが含まれています。そのファイルの現在の内容をこれに置き換えます。

scrape_configs:
- job_name: 'node'
  file_sd_configs:
  - files:
    - 'targets.json'

この設定は、`targets.json` ファイルからノードエクスポーターインスタンスのホストとポート情報を取得する `node` (ノードエクスポーター用)というジョブがあることを指定しています。

次に、その `targets.json` ファイルを作成し、この内容を追加します。

[
  {
    "labels": {
      "job": "node"
    },
    "targets": [
      "localhost:9100"
    ]
  }
]
**注:** このガイドでは、簡潔にするために、JSONサービスディスカバリ設定を手動で操作します。ただし、一般的には、代わりに何らかのJSON生成プロセスまたはツールを使用することをお勧めします。

この設定は、ターゲットが1つ(`localhost:9100`)の `node` ジョブがあることを指定しています。

これでPrometheusを起動できます。

./prometheus

Prometheusが正常に起動した場合、ログに次のような行が表示されます。

level=info ts=2018-08-13T20:39:24.905651509Z caller=main.go:500 msg="Server is ready to receive web requests."

検出されたサービスのメトリクスの調査

Prometheusが稼働している状態で、Prometheus 式ブラウザを使用して、`node` サービスによって公開されているメトリクスを調査できます。たとえば、`up{job="node"}` メトリックを調べると、ノードエクスポーターが適切に検出されていることがわかります。

ターゲットリストの動的な変更

Prometheusのファイルベースのサービスディスカバリメカニズムを使用する場合、Prometheusインスタンスはファイルの変更をリッスンし、インスタンスの再起動を必要とせずに、スクレイプターゲットリストを自動的に更新します。これを示すために、ポート9200で2番目のノードエクスポーターインスタンスを起動します。最初に、ノードエクスポーターバイナリを含むディレクトリに移動し、新しいターミナルウィンドウでこのコマンドを実行します。

./node_exporter --web.listen-address=":9200"

次に、新しいノードエクスポーターのエントリを追加して、`targets.json` の設定を変更します。

[
  {
    "targets": [
      "localhost:9100"
    ],
    "labels": {
      "job": "node"
    }
  },
  {
    "targets": [
      "localhost:9200"
    ],
    "labels": {
      "job": "node"
    }
  }
]

変更を保存すると、Prometheusは新しいターゲットリストを自動的に通知されます。`up{job="node"}` メトリックには、`instance` ラベルが `localhost:9100` と `localhost:9200` の2つのインスタンスが表示されます。

まとめ

このガイドでは、Prometheusノードエクスポーターをインストールして実行し、ファイルベースのサービスディスカバリを使用してノードエクスポーターからメトリクスを検出してスクレイプするようにPrometheusを設定しました。

このドキュメントはオープンソースです。問題の報告またはプルリクエストを送信して、改善にご協力ください。