このページはPrometheus公式ドキュメント和訳+αの一部です。
EXPOSITION FORMATS
メトリクスは、単純なテキストベースの出力フォーマットを利用してPrometheusに出力することができる。 このフォーマットを実装した様々なクライアントライブラリがある。 好みの言語にクライアントライブラリがなければ、自分で実装することができる。
注意:古いバージョンのPrometheusには、現在のテキストベースのフォーマットに加えて、Protocol Buffers(Protobuf)をベースにした出力フォーマットをサポートしているバージョンもあるが、 バージョン2.0からは、PrometheusはProtobufベースのフォーマットをサポートしない。 この変更の背後にある理由については、このドキュメントで読むことができる。
Text-based format
Prometheusバージョン2.0から、Prometheusにメトリクスを出力する全てのプロセスは、テキストベースのフォーマットを利用しなければならない。 ここでは、フォーマットの詳細に加えて、このフォーマットの基本情報を示す。
基本情報
- Inception: April 2014
- Supported in: Prometheus version >=0.4.0
- Transmission: HTTP
- Encoding: UTF-8,
\n
line endings - HTTP Content-Type: text/plain; version=0.0.4 (A missing version value will lead to a fall-back to the most recent text format version.)
- Optional HTTP Content-Encoding: gzip
- Advantages:
- Human-readable
- Easy to assemble, especially for minimalistic cases (no nesting required)
- Readable line by line (with the exception of type hints and docstrings)
- Limitations:
- Verbose
- Types and docstrings not integral part of the syntax, meaning little-to-nonexistent metric contract validation
- Parsing cost
- Supported metric primitives
- Counter
- Gauge
- Histogram
- Summary
- Untyped
テキストフォーマット詳細
Prometheusのテキストベースフォーマットは、行指向である。
行は、line feed文字(\n
)で分割される。
最後の行は、line feed文字で終わらなければならない。
空行は無視される。
行のフォーマット
行の中で、トークンは、任意の数の空白やタブで分割することができる(最低1つ以上、さもなければ直前のトークンにまとめられる)。 最初や最後のホワイトスペースは無視される。
コメント、ヘルプテキスト、型情報
最初のホワイトスペース以外の文字が#
の行は、コメントである。
それらは、#
の直後のトークンが、HELP
やTYPE
でなければ、無視される。
そうである行は、次のように処理される。
そのトークンがHELP
なら、少なくとももう1つのトークン(メトリック名)が期待されている。
残り全てのトークンは、そのメトリック名に対するdocstringと見なされる。
HELP
行は、メトリック名の後ろに、UTF-8の文字の任意の並びを含んで良いが、バックスラッシュとline feedは、それぞれ\\
や\n
のようにエスケープする必要がある。
どのメトリック名に対しても、1つのHELP
行だけ存在して良い。
そのトークンがTYPE
なら、ちょうど2つのトークンが期待されている。
1つ目がメトリック名、2つ目はounter
、gauge
、histogram
、summary
、untyped
のいずれかでそのメトリック名の型を定義する。
TYPE
行は、そのメトリック名が出力される最初のサンプルより前に現れなければならない。
もし、メトリック名に対してTYPE
行がなければ、その型はuntyped
にセットされる。
残りの行は、以下の構文(EBNF)に従って、1行につ1サンプルで、サンプルを記述する。
metric_name [ "{" label_name "=" `"` label_value `"` { "," label_name "=" `"` label_value `"` } [ "," ] "}" ] value [ timestamp ]
サンプル行の構文は、以下の通り。
metric_name
とlabel_name
は、通常のPrometheusの制限に従うlabel_value
は、UTF-8文字の任意の並びで良いが、バックスラッシュ、ダブルクオート、line feed文字は、それぞれ\\
、\"
、\n
のようにエスケープしなければならないvalue
は、Goの関数ParseFloat()
の仕様に従ったfloatである。標準的な数値に加えて、Nan
、+Inf
、-Inf
が有効な値で、それぞれ数値でない、正の無限、負の無限を表すtimestamp
は、Goの関数ParseInt()
の仕様に従ったint64(エポック、つまり1970-01-01 00:00:00 UTCからの、うるう秒を除く、ミリ秒)である
Grouping and sorting
あるメトリックのための全ての行は、オプションでHELP
とTYPE
の行を伴って、1つのグループとして提供されていなければならない。
さらに、繰り返して出力される際に、再現性のある並び順になっていることが望ましいが、必須ではない。言い換えると、計算コストが高価な場合にはソートしないこと。
各行は、メトリック名とラベルのユニークな組み合わせになっていなければならない。 そうでなければ、それを取り込む際の振る舞いは定義されていない。
ヒストグラムとサマリー
ヒストグラムとサマリーはテキストフォーマットで表すのが難しい。 以下の慣例を適用する。
x
という名前のサマリーやヒストグラムのサンプルの合計は、x_sum
という名前の別のサンプルとして与えられるx
という名前のサマリーやヒストグラムのサンプルの個数は、x_count
という名前の別のサンプルとして与えられるx
という名前のサマリーの分位数は、同じ名前x
とラベル{quantile="y"}
を持つ別のサンプル行として与えられるx
という名前のバケットのカウントは、名前x_bucket
とラベル{le="y"}
(y
はバケットの上限)を持つ別のサンプル行として与えられる- ヒストグラムは、
{le="+Inf"}
のバケットを持たなければならない。その値はx_count
の値と等しくなければならない - ヒストグラムのバケットとサマリーの分位数は、それぞれ
le
、quantile
に対する値が数値的に増加する順で現れなければならない
テキストフォーマット例
コメント、HELP
、TYPE
、ヒストグラム、サマリー、エスケープなど、一通り揃ったPrometheusのメトリクスの出力を以下に示す。
# HELP http_requests_total The total number of HTTP requests. # TYPE http_requests_total counter http_requests_total{method="post",code="200"} 1027 1395066363000 http_requests_total{method="post",code="400"} 3 1395066363000 # Escaping in label values: msdos_file_access_time_seconds{path="C:\\DIR\\FILE.TXT",error="Cannot find file:\n\"FILE.TXT\""} 1.458255915e9 # Minimalistic line: metric_without_timestamp_and_labels 12.47 # A weird metric from before the epoch: something_weird{problem="division by zero"} +Inf -3982045 # A histogram, which has a pretty complex representation in the text format: # HELP http_request_duration_seconds A histogram of the request duration. # TYPE http_request_duration_seconds histogram http_request_duration_seconds_bucket{le="0.05"} 24054 http_request_duration_seconds_bucket{le="0.1"} 33444 http_request_duration_seconds_bucket{le="0.2"} 100392 http_request_duration_seconds_bucket{le="0.5"} 129389 http_request_duration_seconds_bucket{le="1"} 133988 http_request_duration_seconds_bucket{le="+Inf"} 144320 http_request_duration_seconds_sum 53423 http_request_duration_seconds_count 144320 # Finally a summary, which has a complex representation, too: # HELP rpc_duration_seconds A summary of the RPC duration in seconds. # TYPE rpc_duration_seconds summary rpc_duration_seconds{quantile="0.01"} 3102 rpc_duration_seconds{quantile="0.05"} 3272 rpc_duration_seconds{quantile="0.5"} 4773 rpc_duration_seconds{quantile="0.9"} 9001 rpc_duration_seconds{quantile="0.99"} 76656 rpc_duration_seconds_sum 1.7560473e+07 rpc_duration_seconds_count 2693
過去のバージョン
過去のフォーマットのバージョンの詳細は、Client Data Exposition Formatを参照すること。
参考リンク
おすすめ書籍

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング
- 作者: Brian Brazil,須田一輝,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/05/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る

- 作者: Mike Julian,松浦隼人
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム
- 作者: 澤田武男,関根達夫,細川一茂,矢吹大輔,Betsy Beyer,Chris Jones,Jennifer Petoff,Niall Richard Murphy,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/08/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
和訳活動の支援
Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。