データモデル
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>", ...}