フェデレーションにより、Prometheusサーバーは別のPrometheusサーバーから選択された時系列データを取得できます。
ネイティブヒストグラムに関する注意(実験的機能):フェデレーションを介してネイティブヒストグラムを取得するには、スクレイピングを行うPrometheusサーバーでネイティブヒストグラムを有効にする必要があります(コマンドラインフラグ`--enable-feature=native-histograms`を使用)。これは、スクレイピングにprotobuf形式が使用されることを意味します。フェデレーションされたメトリックに、同じメトリック名に対して異なるサンプルタイプ(float64、カウンターヒストグラム、ゲージヒストグラム)が混在している場合、フェデレーションペイロードには同じ名前(ただし異なるタイプ)を持つ複数のメトリックファミリが含まれます。技術的には、これはprotobufエクスポジションフォーマットのルールに違反しますが、Prometheusはそれでもすべてのメトリックを正しく取り込むことができます。
フェデレーションにはさまざまなユースケースがあります。一般的には、スケーラブルなPrometheus監視設定を実現するため、またはあるサービスのPrometheusから関連メトリックを別のサービスに取得するために使用されます。
階層型フェデレーションにより、Prometheusは数十のデータセンターと数百万のノードを持つ環境にスケールできます。このユースケースでは、フェデレーショントポロジはツリーに似ており、上位レベルのPrometheusサーバーは、多数の下位サーバーから集約された時系列データを取得します。
たとえば、詳細なデータ(インスタンスレベルのドリルダウン)を収集する多くのデータセンターごとのPrometheusサーバーと、それらのローカルサーバーから集約されたデータ(ジョブレベルのドリルダウン)のみを収集して保存するグローバルPrometheusサーバーのセットで構成される設定があります。これにより、集約されたグローバルビューと詳細なローカルビューが提供されます。
クロスサービスフェデレーションでは、あるサービスのPrometheusサーバーが、別のサービスのPrometheusサーバーから選択されたデータを取得するように設定され、単一のサーバー内で両方のデータセットに対するアラートとクエリを可能にします。
たとえば、複数のサービスを実行するクラスタスケジューラは、クラスタ上で実行されているサービスインスタンスに関するリソース使用状況情報(メモリとCPU使用状況など)を公開する場合があります。一方、そのクラスタ上で実行されているサービスは、アプリケーション固有のサービスメトリックのみを公開します。多くの場合、これらの2つのメトリックセットは、個別のPrometheusサーバーによってスクレイピングされます。フェデレーションを使用すると、サービスレベルのメトリックを含むPrometheusサーバーは、クラスタPrometheusからその特定のサービスに関するクラスタリソース使用状況メトリックを取り込むことができるため、両方のメトリックセットをそのサーバー内で使用できます。
任意のPrometheusサーバーでは、`/federate`エンドポイントを使用すると、そのサーバーで選択された時系列データの現在の値を取得できます。公開する時系列を選択するには、少なくとも1つの`match[]` URLパラメータを指定する必要があります。各`match[]`引数では、`up`または`{job="api-server"}`のようなインスタントベクターセレクターを指定する必要があります。複数の`match[]`パラメータが提供されている場合、一致するすべての時系列の和集合が選択されます。
あるサーバーから別のサーバーにメトリックをフェデレーションするには、宛先Prometheusサーバーがソースサーバーの`/federate`エンドポイントからスクレイピングするように設定し、`honor_labels`スクレイプオプションを有効にして(ソースサーバーによって公開されるラベルを上書きしないように)、必要な`match[]`パラメータを渡します。たとえば、次の`scrape_configs`は、`source-prometheus-{1,2,3}:9090`にあるPrometheusサーバーから、ラベル`job="prometheus"`を持つ時系列または`job:`で始まるメトリック名を持つ時系列を、スクレイピングするPrometheusにフェデレーションします。
scrape_configs:
- job_name: 'federate'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="prometheus"}'
- '{__name__=~"job:.*"}'
static_configs:
- targets:
- 'source-prometheus-1:9090'
- 'source-prometheus-2:9090'
- 'source-prometheus-3:9090'
このドキュメントはオープンソースです。問題点やプルリクエストを送信して、改善にご協力ください。