データモデル
Prometheus は、原則として、すべてのデータを 時系列 として格納します。これは、同じメトリックとラベル付きディメンションの同じセットに属するタイムスタンプ付き値のストリームです。格納された時系列に加えて、Prometheus はクエリの結果として一時的な派生時系列を生成する場合があります。
メトリック名とラベル
各時系列は、メトリック名と、ラベルと呼ばれるオプションのキーと値のペアによって一意に識別されます。
メトリック名
- メトリック名は、測定されているシステムの一般的な機能を指定する必要があります (例:
http_requests_total- 受信した HTTP リクエストの総数)。 - メトリック名は UTF-8 文字を使用できます。
- 最適なエクスペリエンスと互換性のために、メトリック名は正規表現
[a-zA-Z_:][a-zA-Z0-9_:]*に一致する必要があります (下記の警告を参照)。このセット外のメトリック名は、PromQL で使用する場合などに引用する必要があります (UTF-8 ガイドを参照)。
注コロン (':') は、ユーザー定義の記録ルール用に予約されています。エクスポーターや直接のインストルメンテーションで使用しないでください。
メトリックラベル
ラベルを使用すると、同じメトリック名の異なるインスタンスをキャプチャできます。例: メソッド POST を /api/tracks ハンドラーに使用したすべての HTTP リクエスト。これは Prometheus の「次元データモデル」と呼ばれます。クエリ言語では、これらの次元に基づいたフィルタリングと集計が可能です。ラベルの値の変更 (ラベルの追加または削除を含む) は、新しい時系列を作成します。
- ラベル名には UTF-8 文字を使用できます。
__(2 つのアンダースコア) で始まるラベル名は、Prometheus 内部での使用のために予約されていなければなりません。- 最適なエクスペリエンスと互換性のために、ラベル名は正規表現
[a-zA-Z_][a-zA-Z0-9_]*に一致する必要があります (下記の警告を参照)。この正規表現外のラベル名は、PromQL で使用する場合などに引用する必要があります (UTF-8 ガイドを参照)。 - ラベル値には UTF-8 文字を含めることができます。
- ラベル値が空のラベルは、存在しないラベルと同じと見なされます。
警告: メトリック名とラベル名に対する UTF-8 サポートは、Prometheus v3.0.0 で比較的新しく追加されました。広範なエコシステム (下流の PromQL 互換プロジェクトやベンダー、ツール、サードパーティのインストルメンテーション、コレクターなど) が新しい引用メカニズムや緩和された検証などを採用するには時間がかかる場合があります。最良の互換性のために、推奨される (「SHOULD」) 文字セットに従うことをお勧めします。
情報: メトリックとラベルの名前付けに関するベストプラクティスも参照してください。
サンプル
サンプルは実際の時系列データを構成します。各サンプルは以下で構成されます。
- float64 または ネイティブヒストグラム 値
- ミリ秒精度のタイムスタンプ
表記法
メトリック名とラベルのセットが与えられた場合、時系列はしばしばこの表記法を使用して識別されます。
<metric name>{<label name>="<label value>", ...}
たとえば、メトリック名 api_http_requests_total とラベル method="POST" および handler="/messages" を持つ時系列は、次のように記述できます。
api_http_requests_total{method="POST", handler="/messages"}
これは OpenTSDB が使用するのと同じ表記法です。
推奨セット外の UTF-8 文字を持つ名前は、この表記法を使用して引用する必要があります。
{"<metric name>", <label name>="<label value>", ...}
メトリック名は内部的に特殊なラベル名 (__name__="<metric name>") を持つラベルペアとして表されるため、次の表記法を使用することもできます。
{__name__="<metric name>", <label name>="<label value>", ...}