HTTP API
現在の安定版 HTTP API は Prometheus サーバーの /api/v1 でアクセス可能です。破壊的な変更を伴わない追加は、そのエンドポイントの下に追加されます。
フォーマット概要
API の応答フォーマットは JSON です。成功したすべての API リクエストは 2xx ステータスコードを返します。
API ハンドラーに到達した無効なリクエストは、JSON エラーオブジェクトと以下のいずれかの HTTP レスポンスコードを返します。
400 Bad Request: パラメータが欠落しているか、不正な場合。422 Unprocessable Entity: 式を実行できない場合 (RFC4918)。503 Service Unavailable: クエリがタイムアウトまたは中止された場合。
API エンドポイントに到達する前に発生したエラーについては、他の 2xx 以外のコードが返される場合があります。
リクエストの実行を妨げないエラーがある場合、警告の配列が返されることがあります。誤検知である可能性のあるクエリの問題については、追加の情報レベルのアノテーションの配列が返されることがあります。正常に収集されたすべてのデータは、data フィールドに返されます。
JSON レスポンスのエンベロープフォーマットは次のとおりです。
{
"status": "success" | "error",
"data": <data>,
// Only set if status is "error". The data field may still hold
// additional data.
"errorType": "<string>",
"error": "<string>",
// Only set if there were warnings while executing the request.
// There will still be data in the data field.
"warnings": ["<string>"],
// Only set if there were info-level annotations while executing the request.
"infos": ["<string>"]
}
一般的なプレースホルダは次のように定義されます
<rfc3339 | unix_timestamp>: 入力タイムスタンプは、RFC3339 フォーマットまたは秒単位の Unix タイムスタンプとして、サブ秒精度のためのオプションの小数点以下を提供できます。出力タイムスタンプは常に秒単位の Unix タイムスタンプとして表されます。<series_selector>: Prometheus の時系列セレクター、たとえばhttp_requests_totalまたはhttp_requests_total{method=~"(GET|POST)"}のようなもので、URL エンコードする必要があります。<duration>: 時間単位を使用する Prometheus の浮動小数点リテラルのサブセット。たとえば、5mは 5 分の期間を指します。<bool>: ブール値 (文字列trueおよびfalse)。
注意: 繰り返される可能性のあるクエリパラメータの名前は、[] で終わります。
式クエリ
クエリ言語式は、単一のインスタントまたは時間の範囲で評価できます。以下のセクションでは、各タイプの式クエリの API エンドポイントについて説明します。
インスタントクエリ
以下のエンドポイントは、単一の時点でのインスタントクエリを評価します。
GET /api/v1/query
POST /api/v1/query
URL クエリパラメータ
query=<string>: Prometheus 式クエリ文字列。time=<rfc3339 | unix_timestamp>: 評価タイムスタンプ。オプション。timeout=<duration>: 評価タイムアウト。オプション。-query.timeoutフラグの値でデフォルト設定され、上限が設定されます。limit=<number>: 返されるシリーズの最大数。スカラーまたは文字列には影響しませんが、行列とベクトルのシリーズ数を切り詰めます。オプション。0 は無効を意味します。lookback_delta=<number>: このクエリのみについて、ルックバック期間を上書きします。オプション。
time パラメータが省略された場合、現在のサーバー時刻が使用されます。
POST メソッドと Content-Type: application/x-www-form-urlencoded ヘッダーを使用して、これらのパラメータをリクエストボディに直接 URL エンコードできます。これは、サーバー側の URL 文字数制限を超える可能性のある大きなクエリを指定する場合に役立ちます。
クエリ結果の data セクションは、次のフォーマットになります。
{
"resultType": "matrix" | "vector" | "scalar" | "string",
"result": <value>
}
<value> はクエリ結果データを示し、resultType によってフォーマットが異なります。#expression-query-result-formats を参照してください。
次の例は、2015-07-01T20:10:51.781Z の時点で up 式を評価します。
curl 'https://:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z'
{
"status" : "success",
"data" : {
"resultType" : "vector",
"result" : [
{
"metric" : {
"__name__" : "up",
"job" : "prometheus",
"instance" : "localhost:9090"
},
"value": [ 1435781451.781, "1" ]
},
{
"metric" : {
"__name__" : "up",
"job" : "node",
"instance" : "localhost:9100"
},
"value" : [ 1435781451.781, "0" ]
}
]
}
}
範囲クエリ
以下のエンドポイントは、時間の範囲にわたる式クエリを評価します。
GET /api/v1/query_range
POST /api/v1/query_range
URL クエリパラメータ
query=<string>: Prometheus 式クエリ文字列。start=<rfc3339 | unix_timestamp>: 開始タイムスタンプ(含まれます)。end=<rfc3339 | unix_timestamp>: 終了タイムスタンプ(含まれます)。step=<duration | float>: クエリ解像度ステップ幅をdurationフォーマットまたは秒単位の浮動小数点数で指定します。timeout=<duration>: 評価タイムアウト。オプション。-query.timeoutフラグの値でデフォルト設定され、上限が設定されます。limit=<number>: 返されるシリーズの最大数。オプション。0 は無効を意味します。lookback_delta=<number>: このクエリのみについて、ルックバック期間を上書きします。オプション。
POST メソッドと Content-Type: application/x-www-form-urlencoded ヘッダーを使用して、これらのパラメータをリクエストボディに直接 URL エンコードできます。これは、サーバー側の URL 文字数制限を超える可能性のある大きなクエリを指定する場合に役立ちます。
クエリ結果の data セクションは、次のフォーマットになります。
{
"resultType": "matrix",
"result": <value>
}
<value> プレースホルダーのフォーマットについては、範囲ベクトルの結果フォーマットを参照してください。
次の例は、up 式を 30 秒の範囲で、クエリ解像度 15 秒で評価します。
curl 'https://:9090/api/v1/query_range?query=up&start=2015-07-01T20:10:30.781Z&end=2015-07-01T20:11:00.781Z&step=15s'
{
"status" : "success",
"data" : {
"resultType" : "matrix",
"result" : [
{
"metric" : {
"__name__" : "up",
"job" : "prometheus",
"instance" : "localhost:9090"
},
"values" : [
[ 1435781430.781, "1" ],
[ 1435781445.781, "1" ],
[ 1435781460.781, "1" ]
]
},
{
"metric" : {
"__name__" : "up",
"job" : "node",
"instance" : "localhost:9091"
},
"values" : [
[ 1435781430.781, "0" ],
[ 1435781445.781, "0" ],
[ 1435781460.781, "1" ]
]
}
]
}
}
クエリ式のフォーマット
以下のエンドポイントは、PromQL 式を整形して返します。
GET /api/v1/format_query
POST /api/v1/format_query
URL クエリパラメータ
query=<string>: Prometheus 式クエリ文字列。
POST メソッドと Content-Type: application/x-www-form-urlencoded ヘッダーを使用して、これらのパラメータをリクエストボディに直接 URL エンコードできます。これは、サーバー側の URL 文字数制限を超える可能性のある大きなクエリを指定する場合に役立ちます。
クエリ結果の data セクションは、フォーマットされたクエリ式を含む文字列です。コメントはフォーマットされた文字列から削除されることに注意してください。
次の例は、foo/bar 式をフォーマットします。
curl 'https://:9090/api/v1/format_query?query=foo/bar'
{
"status" : "success",
"data" : "foo / bar"
}
PromQL 式を抽象構文木(AST)に解析する
このエンドポイントは実験的であり、将来変更される可能性があります。現在は Prometheus 独自の Web UI でのみ使用されることを意図しており、エンドポイント名と返される正確なフォーマットは Prometheus のバージョンごとに変更される可能性があります。UI で不要になった場合、削除される可能性もあります。
以下のエンドポイントは、PromQL 式を解析し、JSON フォーマットの AST(抽象構文木)表現として返します。
GET /api/v1/parse_query
POST /api/v1/parse_query
URL クエリパラメータ
query=<string>: Prometheus 式クエリ文字列。
POST メソッドと Content-Type: application/x-www-form-urlencoded ヘッダーを使用して、これらのパラメータをリクエストボディに直接 URL エンコードできます。これは、サーバー側の URL 文字数制限を超える可能性のある大きなクエリを指定する場合に役立ちます。
クエリ結果の data セクションは、解析されたクエリ式の AST を含む文字列です。
次の例は、foo/bar 式を解析します。
curl 'https://:9090/api/v1/parse_query?query=foo/bar'
{
"data" : {
"bool" : false,
"lhs" : {
"matchers" : [
{
"name" : "__name__",
"type" : "=",
"value" : "foo"
}
],
"name" : "foo",
"offset" : 0,
"startOrEnd" : null,
"timestamp" : null,
"type" : "vectorSelector"
},
"matching" : {
"card" : "one-to-one",
"include" : [],
"labels" : [],
"on" : false
},
"op" : "/",
"rhs" : {
"matchers" : [
{
"name" : "__name__",
"type" : "=",
"value" : "bar"
}
],
"name" : "bar",
"offset" : 0,
"startOrEnd" : null,
"timestamp" : null,
"type" : "vectorSelector"
},
"type" : "binaryExpr"
},
"status" : "success"
}
メタデータのクエリ
Prometheus は、シリーズとそのラベルに関するメタデータをクエリするための API エンドポイントを提供します。
注これらの API エンドポイントは、選択された時間範囲内にサンプルがないシリーズ、または削除 API エンドポイントを介して削除されたとマークされたサンプルを持つシリーズのメタデータを返す場合があります。追加で返されるシリーズメタデータの正確な範囲は、将来変更される可能性のある実装の詳細です。
ラベルマッチャーによるシリーズの検索
以下のエンドポイントは、特定のラベルセットに一致する時系列のリストを返します。
GET /api/v1/series
POST /api/v1/series
URL クエリパラメータ
match[]=<series_selector>: 返されるシリーズを選択する、繰り返し可能なシリーズセレクター引数。少なくとも 1 つのmatch[]引数が必要です。start=<rfc3339 | unix_timestamp>: 開始タイムスタンプ。end=<rfc3339 | unix_timestamp>: 終了タイムスタンプ。limit=<number>: 返されるシリーズの最大数。オプション。0 は無効を意味します。
POST メソッドと Content-Type: application/x-www-form-urlencoded ヘッダーを使用して、これらのパラメータをリクエストボディに直接 URL エンコードできます。これは、サーバー側の URL 文字数制限を超える可能性のある、大規模または動的な数のシリーズセレクターを指定する場合に役立ちます。
クエリ結果の data セクションは、各シリーズを識別するラベル名/値のペアを含むオブジェクトのリストで構成されます。start および end 時刻は近似値であり、結果には指定された間隔にサンプルがないシリーズのラベル値が含まれる場合があることに注意してください。
次の例は、セレクター up または process_start_time_seconds{job="prometheus"} のいずれかに一致するすべてのシリーズを返します。
curl -g 'https://:9090/api/v1/series?' --data-urlencode 'match[]=up' --data-urlencode 'match[]=process_start_time_seconds{job="prometheus"}'
{
"status" : "success",
"data" : [
{
"__name__" : "up",
"job" : "prometheus",
"instance" : "localhost:9090"
},
{
"__name__" : "up",
"job" : "node",
"instance" : "localhost:9091"
},
{
"__name__" : "process_start_time_seconds",
"job" : "prometheus",
"instance" : "localhost:9090"
}
]
}
ラベル名の取得
以下のエンドポイントは、ラベル名のリストを返します。
GET /api/v1/labels
POST /api/v1/labels
URL クエリパラメータ
start=<rfc3339 | unix_timestamp>: 開始タイムスタンプ。オプション。end=<rfc3339 | unix_timestamp>: 終了タイムスタンプ。オプション。match[]=<series_selector>: ラベル名を取得するシリーズを選択する、繰り返し可能なシリーズセレクター引数。オプション。limit=<number>: 返されるシリーズの最大数。オプション。0 は無効を意味します。
JSON レスポンスの data セクションは、文字列ラベル名のリストです。start および end 時刻は近似値であり、結果には指定された間隔にサンプルがないシリーズのラベル名が含まれる場合があることに注意してください。
例を以下に示します。
curl 'localhost:9090/api/v1/labels'
{
"status": "success",
"data": [
"__name__",
"call",
"code",
"config",
"dialer_name",
"endpoint",
"event",
"goversion",
"handler",
"instance",
"interval",
"job",
"le",
"listener_name",
"name",
"quantile",
"reason",
"role",
"scrape_job",
"slice",
"version"
]
}
ラベル値のクエリ
以下のエンドポイントは、指定されたラベル名に対するラベル値のリストを返します。
GET /api/v1/label/<label_name>/values
URL クエリパラメータ
start=<rfc3339 | unix_timestamp>: 開始タイムスタンプ。オプション。end=<rfc3339 | unix_timestamp>: 終了タイムスタンプ。オプション。match[]=<series_selector>: ラベル値を取得するシリーズを選択する、繰り返し可能なシリーズセレクター引数。オプション。limit=<number>: 返されるシリーズの最大数。オプション。0 は無効を意味します。
JSON レスポンスの data セクションは、文字列ラベル値のリストです。start および end 時刻は近似値であり、結果には指定された間隔にサンプルがないシリーズのラベル値が含まれる場合があることに注意してください。
この例では、http_status_code ラベルのすべてのラベル値をクエリします。
curl https://:9090/api/v1/label/http_status_code/values
{
"status" : "success",
"data" : [
"200",
"504"
]
}
ラベル名は、オプションで値のエスケープ方式を使用してエンコードできます。名前が / 文字を含む場合は、エンコードが必要です。名前をこの方法でエンコードするには
- ラベルの前に
U__を追加します。 - 文字、数字、コロンはそのまま表示されます。
- 単一のアンダースコアを二重アンダースコアに変換します。
- 他のすべての文字については、UTF-8 コードポイントを 16 進数整数として、アンダースコアで囲みます。したがって、
は_20_になり、.は_2e_になります。
テキストエスケープに関する詳細については、元の UTF-8 提案ドキュメント を参照してください。
この例では、http.status_code ラベルのすべてのラベル値をクエリします。
curl https://:9090/api/v1/label/U__http_2e_status_code/values
{
"status" : "success",
"data" : [
"200",
"404"
]
}
エグザンプルのクエリ
これは実験的であり、将来変更される可能性があります。以下のエンドポイントは、有効な PromQL クエリに対して、特定の時間範囲のエグザンプルのリストを返します。
GET /api/v1/query_exemplars
POST /api/v1/query_exemplars
URL クエリパラメータ
query=<string>: Prometheus 式クエリ文字列。start=<rfc3339 | unix_timestamp>: 開始タイムスタンプ。end=<rfc3339 | unix_timestamp>: 終了タイムスタンプ。
curl -g 'https://:9090/api/v1/query_exemplars?query=test_exemplar_metric_total&start=2020-09-14T15:22:25.479Z&end=2020-09-14T15:23:25.479Z'
{
"status": "success",
"data": [
{
"seriesLabels": {
"__name__": "test_exemplar_metric_total",
"instance": "localhost:8090",
"job": "prometheus",
"service": "bar"
},
"exemplars": [
{
"labels": {
"trace_id": "EpTxMJ40fUus7aGY"
},
"value": "6",
"timestamp": 1600096945.479
}
]
},
{
"seriesLabels": {
"__name__": "test_exemplar_metric_total",
"instance": "localhost:8090",
"job": "prometheus",
"service": "foo"
},
"exemplars": [
{
"labels": {
"trace_id": "Olp9XHlq763ccsfa"
},
"value": "19",
"timestamp": 1600096955.479
},
{
"labels": {
"trace_id": "hCtjygkIHwAN9vs4"
},
"value": "20",
"timestamp": 1600096965.489
}
]
}
]
}
式クエリの結果フォーマット
式クエリは、data セクションの result プロパティで次の応答値のいずれかを返す場合があります。<sample_value> プレースホルダーは数値サンプル値です。JSON は NaN、Inf、-Inf のような特殊な浮動小数点値をサポートしていないため、サンプル値は生の数値ではなく、引用符で囲まれた JSON 文字列として転送されます。
キー "histogram" および "histograms" は、実験的なネイティブヒストグラムが応答に含まれている場合にのみ表示されます。それらのプレースホルダー <histogram> は、以下のセクションで詳細に説明されています。
範囲ベクトル
範囲ベクトルは、結果タイプ matrix として返されます。対応する result プロパティは次のフォーマットになります。
[
{
"metric": { "<label_name>": "<label_value>", ... },
"values": [ [ <unix_time>, "<sample_value>" ], ... ],
"histograms": [ [ <unix_time>, <histogram> ], ... ]
},
...
]
各シリーズには、"values" キー、"histograms" キー、またはその両方を持つことができます。指定されたタイムスタンプに対しては、浮動小数点またはヒストグラムタイプのサンプルが 1 つだけ存在します。
シリーズは metric でソートされて返されます。sort や sort_by_label などの関数は、範囲ベクトルには効果がありません。
インスタントベクトル
インスタントベクトルは、結果タイプ vector として返されます。対応する result プロパティは次のフォーマットになります。
[
{
"metric": { "<label_name>": "<label_value>", ... },
"value": [ <unix_time>, "<sample_value>" ],
"histogram": [ <unix_time>, <histogram> ]
},
...
]
各シリーズには、"value" キー、または "histogram" キーを持つことができますが、両方を持つことはできません。
sort や sort_by_label のような関数が使用されていない限り、シリーズは特定の順序で返される保証はありません。
スカラー
スカラー結果は、結果タイプ scalar として返されます。対応する result プロパティは次のフォーマットになります。
[ <unix_time>, "<scalar_value>" ]
文字列
文字列結果は、結果タイプ string として返されます。対応する result プロパティは次のフォーマットになります。
[ <unix_time>, "<string_value>" ]
ネイティブヒストグラム
上記の <histogram> プレースホルダーは次のようにフォーマットされます。
ネイティブヒストグラムは実験的な機能であり、以下のフォーマットは今後変更される可能性があることに注意してください。
{
"count": "<count_of_observations>",
"sum": "<sum_of_observations>",
"buckets": [ [ <boundary_rule>, "<left_boundary>", "<right_boundary>", "<count_in_bucket>" ], ... ]
}
<boundary_rule> プレースホルダーは 0 から 3 までの整数で、次の意味を持ちます。
- 0: 「左側が開いている」(左境界は排他的、右境界は包括的)
- 1: 「右側が開いている」(左境界は包括的、右境界は排他的)
- 2: 「両側が開いている」(両方の境界が排他的)
- 3: 「両側が閉じている」(両方の境界が包括的)
現在実装されているバケットスキーマでは、正のバケットは「左側が開いて」、負のバケットは「右側が開いて」、ゼロバケット(負の左境界と正の右境界を持つ)は「両側が閉じている」ことに注意してください。
ターゲット
以下のエンドポイントは、Prometheus ターゲット検出の現在の状態の概要を返します。
GET /api/v1/targets
アクティブなターゲットとドロップされたターゲットの両方がデフォルトで応答に含まれます。ドロップされたターゲットは、設定されていれば keep_dropped_targets の制限の対象となります。labels は、リラベル処理後のラベルセットを表します。discoveredLabels は、リラベル処理が行われる前のサービスディスカバリ中に取得された、変更されていないラベルを表します。
curl https://:9090/api/v1/targets
{
"status": "success",
"data": {
"activeTargets": [
{
"discoveredLabels": {
"__address__": "127.0.0.1:9090",
"__metrics_path__": "/metrics",
"__scheme__": "http",
"job": "prometheus"
},
"labels": {
"instance": "127.0.0.1:9090",
"job": "prometheus"
},
"scrapePool": "prometheus",
"scrapeUrl": "http://127.0.0.1:9090/metrics",
"globalUrl": "http://example-prometheus:9090/metrics",
"lastError": "",
"lastScrape": "2017-01-17T15:07:44.723715405+01:00",
"lastScrapeDuration": 0.050688943,
"health": "up",
"scrapeInterval": "1m",
"scrapeTimeout": "10s"
}
],
"droppedTargets": [
{
"discoveredLabels": {
"__address__": "127.0.0.1:9100",
"__metrics_path__": "/metrics",
"__scheme__": "http",
"__scrape_interval__": "1m",
"__scrape_timeout__": "10s",
"job": "node"
},
"scrapePool": "node"
}
]
}
}
state クエリパラメータにより、呼び出し元はアクティブまたはドロップされたターゲットでフィルタリングできます(例:state=active、state=dropped、state=any)。フィルタリングされたターゲットに対しても空の配列が返されることに注意してください。その他の値は無視されます。
curl 'https://:9090/api/v1/targets?state=active'
"status": "success",
"data": {
"activeTargets": [
{
"discoveredLabels": {
"__address__": "127.0.0.1:9090",
"__metrics_path__": "/metrics",
"__scheme__": "http",
"job": "prometheus"
},
"labels": {
"instance": "127.0.0.1:9090",
"job": "prometheus"
},
"scrapePool": "prometheus",
"scrapeUrl": "http://127.0.0.1:9090/metrics",
"globalUrl": "http://example-prometheus:9090/metrics",
"lastError": "",
"lastScrape": "2017-01-17T15:07:44.723715405+01:00",
"lastScrapeDuration": 50688943,
"health": "up"
}
],
"droppedTargets": []
}
}
scrapePool クエリパラメータにより、呼び出し元はスクレイププール名でフィルタリングできます。
curl 'https://:9090/api/v1/targets?scrapePool=node_exporter'
"status": "success",
"data": {
"activeTargets": [
{
"discoveredLabels": {
"__address__": "127.0.0.1:9091",
"__metrics_path__": "/metrics",
"__scheme__": "http",
"job": "node_exporter"
},
"labels": {
"instance": "127.0.0.1:9091",
"job": "node_exporter"
},
"scrapePool": "node_exporter",
"scrapeUrl": "http://127.0.0.1:9091/metrics",
"globalUrl": "http://example-prometheus:9091/metrics",
"lastError": "",
"lastScrape": "2017-01-17T15:07:44.723715405+01:00",
"lastScrapeDuration": 50688943,
"health": "up"
}
],
"droppedTargets": []
}
}
ルール
/rules API エンドポイントは、現在ロードされているアラートルールと記録ルールのリストを返します。さらに、各アラートルールによって Prometheus インスタンスが発火させた現在のアラートを返します。
/rules エンドポイントは比較的新しいため、API v1 全体と同じ安定性保証はありません。
GET /api/v1/rules
URL クエリパラメータ
type=alert|record: アラートルール(例:type=alert)または記録ルール(例:type=record)のみを返します。パラメータが不在または空の場合、フィルタリングは行われません。rule_name[]=<string>: 指定されたルール名のみを返します。パラメータが繰り返される場合、提供された名前のいずれかに一致するルールが返されます。グループ内のすべてのルールがフィルタリングされた場合、そのグループは返されません。パラメータが不在または空の場合、フィルタリングは行われません。rule_group[]=<string>: 指定されたルールグループ名のみを返します。パラメータが繰り返される場合、提供されたルールグループ名のいずれかに一致するルールが返されます。パラメータが不在または空の場合、フィルタリングは行われません。file[]=<string>: 指定されたファイルパスのみを返します。パラメータが繰り返される場合、提供されたファイルパスのいずれかに一致するルールが返されます。パラメータが不在または空の場合、フィルタリングは行われません。exclude_alerts=<bool>: ルールのみを返します。アクティブなアラートは返しません。match[]=<label_selector>: 設定されたラベルがラベルセレクターを満たすルールのみを返します。パラメータが繰り返される場合、提供されたラベルセレクターのセットのいずれかに一致するルールが返されます。テンプレート展開後の値(アラートルールの場合)ではなく、各ルールの定義内のラベルがマッチングされることに注意してください。オプション。group_limit=<number>:group_limitパラメータを使用すると、単一の応答で返されるルールグループの数に制限を指定できます。ルールグループの総数が指定されたgroup_limit値を超える場合、応答にgroupNextTokenプロパティが含まれます。このgroupNextTokenプロパティの値を使用して、後続のリクエストでgroup_next_tokenパラメータで残りのルールグループをページングできます。groupNextTokenプロパティは、すべての利用可能なルールグループを取得したことを示す最終応答には含まれません。ページング中にルールグループが変更されている場合、応答の一貫性については保証されません。group_next_token:group_limitプロパティが設定されている場合に、前のリクエストで返されたページネーショントークン。group_next_tokenパラメータは、ルールグループの大量を反復的にページングするために使用されます。group_next_tokenパラメータを使用するには、group_limitパラメータも存在する必要があります。ページング中に次のトークンと一致するルールグループが削除された場合、ステータスコード 400 の応答が返されます。
curl https://:9090/api/v1/rules
{
"data": {
"groups": [
{
"rules": [
{
"alerts": [
{
"activeAt": "2018-07-04T20:27:12.60602144+02:00",
"annotations": {
"summary": "High request latency"
},
"labels": {
"alertname": "HighRequestLatency",
"severity": "page"
},
"state": "firing",
"value": "1e+00"
}
],
"annotations": {
"summary": "High request latency"
},
"duration": 600,
"health": "ok",
"labels": {
"severity": "page"
},
"name": "HighRequestLatency",
"query": "job:request_latency_seconds:mean5m{job=\"myjob\"} > 0.5",
"type": "alerting"
},
{
"health": "ok",
"name": "job:http_inprogress_requests:sum",
"query": "sum by (job) (http_inprogress_requests)",
"type": "recording"
}
],
"file": "/rules.yaml",
"interval": 60,
"limit": 0,
"name": "example"
}
]
},
"status": "success"
}
アラート
/alerts エンドポイントは、すべての有効なアラートのリストを返します。
/alerts エンドポイントは比較的新しいため、API v1 全体と同じ安定性保証はありません。
GET /api/v1/alerts
curl https://:9090/api/v1/alerts
{
"data": {
"alerts": [
{
"activeAt": "2018-07-04T20:27:12.60602144+02:00",
"annotations": {},
"labels": {
"alertname": "my-alert"
},
"state": "firing",
"value": "1e+00"
}
]
},
"status": "success"
}
ターゲットメタデータのクエリ
以下のエンドポイントは、現在ターゲットからスクレイプされているメトリックに関するメタデータを返します。これは実験的であり、将来変更される可能性があります。
GET /api/v1/targets/metadata
URL クエリパラメータ
match_target=<label_selectors>: ラベルセットでターゲットを照合するラベルセレクター。空のままにした場合、すべてのターゲットが照合されます。metric=<string>: メタデータを取得するメトリック名。空のままにした場合、すべてのメトリックメタデータが取得されます。limit=<number>: マッチするターゲットの最大数。
クエリ結果の data セクションは、メトリックメタデータとターゲットラベルセットを含むオブジェクトのリストで構成されます。
次の例は、ラベル job="prometheus" を持つ最初の 2 つのターゲットから go_goroutines メトリックのすべてのメタデータエントリを返します。
curl -G http://:9091/api/v1/targets/metadata \
--data-urlencode 'metric=go_goroutines' \
--data-urlencode 'match_target={job="prometheus"}' \
--data-urlencode 'limit=2'
{
"status": "success",
"data": [
{
"target": {
"instance": "127.0.0.1:9090",
"job": "prometheus"
},
"type": "gauge",
"help": "Number of goroutines that currently exist.",
"unit": ""
},
{
"target": {
"instance": "127.0.0.1:9091",
"job": "prometheus"
},
"type": "gauge",
"help": "Number of goroutines that currently exist.",
"unit": ""
}
]
}
次の例は、ラベル instance="127.0.0.1:9090" を持つすべてのターゲットのすべてのメトリックのメタデータを返します。
curl -G https://:9091/api/v1/targets/metadata \
--data-urlencode 'match_target={instance="127.0.0.1:9090"}'
{
"status": "success",
"data": [
// ...
{
"target": {
"instance": "127.0.0.1:9090",
"job": "prometheus"
},
"metric": "prometheus_treecache_zookeeper_failures_total",
"type": "counter",
"help": "The total number of ZooKeeper failures.",
"unit": ""
},
{
"target": {
"instance": "127.0.0.1:9090",
"job": "prometheus"
},
"metric": "prometheus_tsdb_reloads_total",
"type": "counter",
"help": "Number of times the database reloaded block data from disk.",
"unit": ""
},
// ...
]
}
メトリックメタデータのクエリ
ターゲットから現在スクレイプされているメトリックに関するメタデータを返します。ただし、ターゲット情報は提供されません。これは実験的と見なされ、将来変更される可能性があります。
GET /api/v1/metadata
URL クエリパラメータ
limit=<number>: 返されるメトリックの最大数。limit_per_metric=<number>: メトリックごとに返されるメタデータの最大数。metric=<string>: メタデータをフィルタリングするメトリック名。空のままにした場合、すべてのメトリックメタデータが取得されます。
クエリ結果の data セクションは、各キーがメトリック名、各値がそのメトリック名に対してすべてのターゲットで公開されている一意のメタデータオブジェクトのリストであるオブジェクトで構成されます。
次の例は、2 つのメトリックを返します。メトリック http_requests_total には、リストに複数のオブジェクトがあることに注意してください。少なくとも 1 つのターゲットの HELP の値が他のものと一致しません。
curl -G https://:9090/api/v1/metadata?limit=2
{
"status": "success",
"data": {
"cortex_ring_tokens": [
{
"type": "gauge",
"help": "Number of tokens in the ring",
"unit": ""
}
],
"http_requests_total": [
{
"type": "counter",
"help": "Number of HTTP requests",
"unit": ""
},
{
"type": "counter",
"help": "Amount of HTTP requests",
"unit": ""
}
]
}
}
次の例は、各メトリックに対して 1 つのメタデータエントリのみを返します。
curl -G https://:9090/api/v1/metadata?limit_per_metric=1
{
"status": "success",
"data": {
"cortex_ring_tokens": [
{
"type": "gauge",
"help": "Number of tokens in the ring",
"unit": ""
}
],
"http_requests_total": [
{
"type": "counter",
"help": "Number of HTTP requests",
"unit": ""
}
]
}
}
次の例は、http_requests_total メトリックのメタデータのみを返します。
curl -G https://:9090/api/v1/metadata?metric=http_requests_total
{
"status": "success",
"data": {
"http_requests_total": [
{
"type": "counter",
"help": "Number of HTTP requests",
"unit": ""
},
{
"type": "counter",
"help": "Amount of HTTP requests",
"unit": ""
}
]
}
}
Alertmanager
以下のエンドポイントは、Prometheus Alertmanager 検出の現在の状態の概要を返します。
GET /api/v1/alertmanagers
アクティブな Alertmanager とドロップされた Alertmanager の両方が応答に含まれます。
curl https://:9090/api/v1/alertmanagers
{
"status": "success",
"data": {
"activeAlertmanagers": [
{
"url": "http://127.0.0.1:9090/api/v1/alerts"
}
],
"droppedAlertmanagers": [
{
"url": "http://127.0.0.1:9093/api/v1/alerts"
}
]
}
}
ステータス
以下のステータスエンドポイントは、現在のPrometheus構成を公開します。
設定
以下のエンドポイントは、現在ロードされている構成ファイルを返します。
GET /api/v1/status/config
構成はダンプされたYAMLファイルとして返されます。YAMLライブラリの制限により、YAMLコメントは含まれません。
curl https://:9090/api/v1/status/config
{
"status": "success",
"data": {
"yaml": "<content of the loaded config file in YAML>",
}
}
フラグ
以下のエンドポイントは、Prometheusが構成されたフラグの値を返します。
GET /api/v1/status/flags
すべての値は結果型stringです。
curl https://:9090/api/v1/status/flags
{
"status": "success",
"data": {
"alertmanager.notification-queue-capacity": "10000",
"alertmanager.timeout": "10s",
"log.level": "info",
"query.lookback-delta": "5m",
"query.max-concurrency": "20",
...
}
}
v2.2 で追加
実行時情報
以下のエンドポイントは、Prometheusサーバーに関するさまざまな実行時情報プロパティを返します。
GET /api/v1/status/runtimeinfo
返される値は、実行時プロパティの性質によって異なります。
curl https://:9090/api/v1/status/runtimeinfo
{
"status": "success",
"data": {
"startTime": "2019-11-02T17:23:59.301361365+01:00",
"CWD": "/",
"hostname" : "DESKTOP-717H17Q",
"serverTime": "2025-01-05T18:27:33Z",
"reloadConfigSuccess": true,
"lastConfigTime": "2019-11-02T17:23:59+01:00",
"timeSeriesCount": 873,
"corruptionCount": 0,
"goroutineCount": 48,
"GOMAXPROCS": 4,
"GOGC": "",
"GODEBUG": "",
"storageRetention": "15d"
}
}
注返される実行時プロパティの正確な内容は、Prometheusのバージョン間で予告なく変更される可能性があります。
v2.14 で追加
ビルド情報
以下のエンドポイントは、Prometheusサーバーに関するさまざまなビルド情報プロパティを返します。
GET /api/v1/status/buildinfo
すべての値は結果型stringです。
curl https://:9090/api/v1/status/buildinfo
{
"status": "success",
"data": {
"version": "2.13.1",
"revision": "cb7cbad5f9a2823a622aaa668833ca04f50a0ea7",
"branch": "master",
"buildUser": "julius@desktop",
"buildDate": "20191102-16:19:59",
"goVersion": "go1.13.1"
}
}
注返されるビルドプロパティの正確な内容は、Prometheusのバージョン間で予告なく変更される可能性があります。
v2.14 で追加
TSDB統計
以下のエンドポイントは、Prometheus TSDBに関するさまざまなカーディナリティ統計を返します。
GET /api/v1/status/tsdb
URL クエリパラメータ
limit=<number>: 各統計セットで返されるアイテムの数を指定された数に制限します。デフォルトでは10アイテムが返されます。
クエリ結果のdataセクションは、以下から構成されます。
- headStats: TSDBのヘッドブロックに関する以下のデータを提供します。
- numSeries: シリーズの数。
- chunkCount: チャンクの数。
- minTime: 現在の最小タイムスタンプ(ミリ秒)。
- maxTime: 現在の最大タイムスタンプ(ミリ秒)。
- seriesCountByMetricName: メトリクス名とそのシリーズ数をリストで提供します。
- labelValueCountByLabelName: ラベル名とその値の数をリストで提供します。
- memoryInBytesByLabelName ラベル名ごとに使用されるメモリ(バイト単位)のリストを提供します。メモリ使用量は、指定されたラベル名のすべての値の長さを加算して計算されます。
- seriesCountByLabelPair ラベル値のペアとそのシリーズ数をリストで提供します。
curl https://:9090/api/v1/status/tsdb
{
"status": "success",
"data": {
"headStats": {
"numSeries": 508,
"chunkCount": 937,
"minTime": 1591516800000,
"maxTime": 1598896800143,
},
"seriesCountByMetricName": [
{
"name": "net_conntrack_dialer_conn_failed_total",
"value": 20
},
{
"name": "prometheus_http_request_duration_seconds_bucket",
"value": 20
}
],
"labelValueCountByLabelName": [
{
"name": "__name__",
"value": 211
},
{
"name": "event",
"value": 3
}
],
"memoryInBytesByLabelName": [
{
"name": "__name__",
"value": 8266
},
{
"name": "instance",
"value": 28
}
],
"seriesCountByLabelValuePair": [
{
"name": "job=prometheus",
"value": 425
},
{
"name": "instance=localhost:9090",
"value": 425
}
]
}
}
v3.6.0 で追加
TSDBブロック
注意: このエンドポイントは実験的であり、将来変更される可能性があります。エンドポイント名と返されるデータの正確な形式は、Prometheusのバージョン間で変更される可能性があります。このエンドポイントによって返される正確なメタデータは実装の詳細であり、将来のPrometheusバージョンで変更される可能性があります。
以下のエンドポイントは、現在ロードされているTSDBブロックとそのメタデータのリストを返します。
GET /api/v1/status/tsdb/blocks
このエンドポイントは、各ブロックに対して以下の情報を返します。
ulid: ブロックの一意ID。minTime: ブロックの最小タイムスタンプ(ミリ秒)。maxTime: ブロックの最大タイムスタンプ(ミリ秒)。stats:numSeries: ブロック内のシリーズ数。numSamples: ブロック内のサンプル数。numChunks: ブロック内のチャンク数。
compaction:level: ブロックのコンパクションレベル。sources: このブロックをコンパクションするために使用されたソースブロックのULIDのリスト。
version: ブロックのバージョン。
curl https://:9090/api/v1/status/tsdb/blocks
{
"status": "success",
"data": {
"blocks": [
{
"ulid": "01JZ8JKZY6XSK3PTDP9ZKRWT60",
"minTime": 1750860620060,
"maxTime": 1750867200000,
"stats": {
"numSamples": 13701,
"numSeries": 716,
"numChunks": 716
},
"compaction": {
"level": 1,
"sources": [
"01JZ8JKZY6XSK3PTDP9ZKRWT60"
]
},
"version": 1
}
]
}
}
v2.15 で追加
WALリプレイ統計
以下のエンドポイントは、WALリプレイに関する情報を返します。
GET /api/v1/status/walreplay
- read: これまでにリプレイされたセグメントの数。
- total: リプレイが必要なセグメントの総数。
- progress: リプレイの進捗状況(0~100%)。
- state: リプレイの状態。可能な状態は以下の通りです。
- waiting: リプレイの開始を待機中。
- in progress: リプレイが進行中。
- done: リプレイが完了しました。
curl https://:9090/api/v1/status/walreplay
{
"status": "success",
"data": {
"min": 2,
"max": 5,
"current": 40,
"state": "in progress"
}
}
注このエンドポイントは、サーバーが準備完了とマークされる前に利用可能であり、WALリプレイの進行状況を監視するためにリアルタイムで更新されます。
v2.28 で追加
TSDB管理API
これらは、高度なユーザーのためにデータベース機能を提供するAPIです。これらのAPIは、--web.enable-admin-apiが設定されていない限り有効になりません。
スナップショット
スナップショットは、TSDBのデータディレクトリの下にあるsnapshots/<datetime>-<rand>に、すべての現在のデータをスナップショットとして作成し、そのディレクトリを応答として返します。オプションで、ヘッドブロックにのみ存在し、まだディスクにコンパクションされていないデータのスナップショットをスキップできます。
POST /api/v1/admin/tsdb/snapshot
PUT /api/v1/admin/tsdb/snapshot
URL クエリパラメータ
skip_head=<bool>: ヘッドブロックに存在するデータをスキップします。オプション。
curl -XPOST https://:9090/api/v1/admin/tsdb/snapshot
{
"status": "success",
"data": {
"name": "20171210T211224Z-2be650b6d019eb54"
}
}
スナップショットは現在<data-dir>/snapshots/20171210T211224Z-2be650b6d019eb54に存在します。
v2.1 で追加、v2.9からPUTをサポート
シリーズの削除
DeleteSeriesは、時間範囲内のシリーズの選択に対するデータを削除します。実際のデータはディスク上に残っており、将来のコンパクションでクリーンアップされるか、Clean Tombstonesエンドポイントをヒットすることで明示的にクリーンアップできます。
成功した場合、204が返されます。
POST /api/v1/admin/tsdb/delete_series
PUT /api/v1/admin/tsdb/delete_series
URL クエリパラメータ
match[]=<series_selector>: 削除するシリーズを選択する繰り返しラベルマッチャー引数。少なくとも1つのmatch[]引数が必要です。start=<rfc3339 | unix_timestamp>: 開始タイムスタンプ。オプションで、最小可能な時間にデフォルト設定されます。end=<rfc3339 | unix_timestamp>: 終了タイムスタンプ。オプションで、最大可能な時間にデフォルト設定されます。
開始時間と終了時間の両方を指定しない場合、一致したシリーズのすべてのデータがデータベースからクリアされます。
例
curl -X POST \
-g 'https://:9090/api/v1/admin/tsdb/delete_series?match[]=up&match[]=process_start_time_seconds{job="prometheus"}'
注このエンドポイントは、シリーズからのサンプルを削除済みとしてマークしますが、関連するシリーズメタデータが影響を受ける時間範囲のメタデータクエリで(Tombstonesのクリーンアップ後でも)返されることを必ずしも防ぐわけではありません。メタデータ削除の正確な範囲は実装の詳細であり、将来変更される可能性があります。
v2.1 で追加、v2.9からPUTをサポート
Tombstonesのクリーンアップ
CleanTombstonesは、削除されたデータをディスクから削除し、既存のTombstonesをクリーンアップします。これは、シリーズを削除した後にスペースを解放するために使用できます。
成功した場合、204が返されます。
POST /api/v1/admin/tsdb/clean_tombstones
PUT /api/v1/admin/tsdb/clean_tombstones
パラメータやボディは必要ありません。
curl -XPOST https://:9090/api/v1/admin/tsdb/clean_tombstones
v2.1 で追加、v2.9からPUTをサポート
リモート書き込みレシーバー
Prometheusは、Prometheusリモート書き込みプロトコルのレシーバーとして構成できます。これは、サンプルを収集する効率的な方法とは見なされません。特定の低ボリュームのユースケースにのみ注意して使用してください。スクレイピングによる取り込みを置き換え、Prometheusをプッシュベースのメトリクス収集システムに変えるには適していません。
--web.enable-remote-write-receiverを設定してリモート書き込みレシーバーを有効にします。有効にすると、リモート書き込みレシーバーのエンドポイントは/api/v1/writeになります。詳細については、こちらをご覧ください。
v2.33 で追加
OTLPレシーバー
Prometheusは、OTLPメトリクスプロトコルのレシーバーとして構成できます。これは、サンプルを収集する効率的な方法とは見なされません。特定の低ボリュームのユースケースにのみ注意して使用してください。スクレイピングによる取り込みを置き換えるには適していません。
--web.enable-otlp-receiverを設定してOTLPレシーバーを有効にします。有効にすると、OTLPレシーバーのエンドポイントは/api/v1/otlp/v1/metricsになります。
v2.47 で追加
OTLPデルタ
Prometheusは、受信したメトリクスをデルタテンポラリティから累積相当に変換できます。これは、OpenTelemetry Collectorのdeltatocumulativeを使用して行われます。
有効にするには、--enable-feature=otlp-deltatocumulativeを渡します。
v3.2 で追加
通知
以下のエンドポイントは、Prometheusサーバー自体に関するアクティブなステータスの通知情報を提供します。通知はWeb UIで使用されます。
これらのエンドポイントは実験的です。将来変更される可能性があります。
アクティブな通知
/api/v1/notificationsエンドポイントは、現在アクティブなすべての通知のリストを返します。
GET /api/v1/notifications
例
curl https://:9090/api/v1/notifications
{
"status": "success",
"data": [
{
"text": "Prometheus is shutting down and gracefully stopping all operations.",
"date": "2024-10-07T12:33:08.551376578+02:00",
"active": true
}
]
}
v3.0 で追加
ライブ通知
/api/v1/notifications/liveエンドポイントは、Server-Sent Eventsを使用して、発生したライブ通知をストリームします。削除された通知はactive: falseで送信されます。アクティブな通知は、エンドポイントに接続したときに送信されます。
GET /api/v1/notifications/live
例
curl https://:9090/api/v1/notifications/live
data: {
"status": "success",
"data": [
{
"text": "Prometheus is shutting down and gracefully stopping all operations.",
"date": "2024-10-07T12:33:08.551376578+02:00",
"active": true
}
]
}
注意: 最大サブスクライバー数に達した場合、/notifications/liveエンドポイントは204 No Content応答を返します。リスナーの最大数は、フラグ--web.max-notifications-subscribers(デフォルトは16)で設定できます。
GET /api/v1/notifications/live
204 No Content
v3.0 で追加