スクレイピングプロトコルのネゴシエーション
概要
このドキュメントでは、Prometheus がターゲットからメトリックをスクレイピングする際に使用するプロトコルネゴシエーションメカニズムについて説明します。Accept ヘッダーの形式、サポートされている Content Type、およびメトリックエクスポージャーに最適な形式を決定するためのネゴシエーションプロセスを定義します。
はじめに
Prometheus は、テキストベースおよびバイナリ protobuf フォーマットを含む、複数のフォーマットでメトリックをスクレイピングすることをサポートしています。Accept ヘッダーの値に基づいて、ターゲットはメトリックエクスポージャーの応答に最適な Content Type を選択します。
プロトコルタイプ
サポートされているプロトコル
Prometheus は以下のプロトコルをサポートしています
PrometheusProto- バイナリ protobuf フォーマットPrometheusText0.0.4- Prometheus テキストフォーマットバージョン 0.0.4PrometheusText1.0.0- Prometheus テキストフォーマットバージョン 1.0.0OpenMetricsText0.0.1- OpenMetrics テキストフォーマットバージョン 0.0.1OpenMetricsText1.0.0- OpenMetrics テキストフォーマットバージョン 1.0.0
プロトコルのヘッダー
各プロトコルには、特定の MIME タイプとパラメータが関連付けられている必要があります。
| プロトコル | MIME タイプ | パラメータ |
|---|---|---|
| PrometheusProto | application/vnd.google.protobuf | proto=io.prometheus.client.MetricFamily;encoding=delimited |
| PrometheusText0.0.4 | text/plain | version=0.0.4 |
| PrometheusText1.0.0 | text/plain | version=1.0.0 |
| OpenMetricsText0.0.1 | application/openmetrics-text | version=0.0.1 |
| OpenMetricsText1.0.0 | application/openmetrics-text | version=1.0.0 |
Accept ヘッダーの構築
Prometheus は、サポートするフォーマットを示すために Accept ヘッダーを構築します。
基本フォーマット
Accept ヘッダーは次のように構築する必要があります。
- ターゲットがサポートする各プロトコルについて
- プロトコルの MIME タイプとパラメータを指定する必要があります。
- protobuf プロトコルの場合、「delimited」エンコーディングを指定する必要があります。
- PrometheusText1.0.0 および OpenMetricsText1.0.0 の場合、エスケープスキームパラメータを付加することをお勧めします。
- 品質値 (q) パラメータを付加することをお勧めします。
- 品質値が最も低いキャッチオール
*/*を付加することをお勧めします。
品質値
品質値は、Accept ヘッダーでのプロトコルの位置に基づいて降順で割り当てること).
- 最初のプロトコル: q=0.{n+1}
- 2番目のプロトコル: q=0.{n}
- 以降同様に、n はサポートされているプロトコルの数).
エスケープスキーム
PrometheusText1.0.0 および OpenMetricsText1.0.0 プロトコルの場合、Accept ヘッダーにはエスケープスキームパラメータ: escaping=<scheme> を含めること).
ここで <scheme> は次のいずれかである必要があります
allow-utf-8underscoresdotsvalues
エスケープスキームの機能の詳細については、エスケープスキーム仕様を参照してください。
圧縮
Accept-Encoding ヘッダーは次のように設定すること).
gzip圧縮が有効な場合identity圧縮が無効な場合
フォーマットの選択
スクレイプターゲットは、Prometheus によって生成された Accept ヘッダーのプロトコルリストに基づいて、適切な Content-Type を選択するために次のプロセスを使用すること.
- Prometheus がサポートする Accept ヘッダー内の最も重み付けの高いプロトコルを使用する必要があります。
- サポートされているプロトコルがない場合、ターゲットはユーザー設定のフォールバックスクレイププロトコルを使用してもかまいません。
- フォールバックが指定されていない場合、ターゲットは最終手段として PrometheusText0.0.4 を使用する必要があります。
Content-Type レスポンス
ターゲットは、受け入れられたフォーマットのいずれかに一致する Content-Type ヘッダーで応答すること.
- 適切な MIME タイプ.
- バージョンパラメータ.
- テキストフォーマットバージョン 1.0.0 以上の場合、エスケープスキームパラメータ.
セキュリティ上の考慮事項
- ターゲットは、潜在的なインジェクション攻撃を防ぐために Accept ヘッダーを検証する必要があります。
- プロトコルの混同を防ぐために、エスケープスキームパラメータを検証する必要があります。
- MIME タイプの混同を防ぐために、Content-Type ヘッダーは適切にサニタイズする必要があります。
例
デフォルトの Accept ヘッダー
Accept: application/openmetrics-text;version=1.0.0;escaping=allow-utf-8;q=0.5,application/openmetrics-text;version=0.0.1;q=0.4,text/plain;version=1.0.0;escaping=allow-utf-8;q=0.3,text/plain;version=0.0.4;q=0.2,/;q=0.1
Protobuf ファースト Accept ヘッダー
Accept: application/vnd.google.protobuf;proto=io.prometheus.client.MetricFamily;encoding=delimited;q=0.5,application/
openmetrics-text;version=1.0.0;escaping=allow-utf-8;q=0.4,application/openmetrics-text;version=0.0.1;q=0.3,text/plain;version=1.0.0;escaping=allow-utf-8;q=0.2,text/plain;version=0.0.4;q=0.1,/;q=0.0