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
コードが返されることがあります。
リクエストの実行を妨げないエラーがある場合、警告の配列が返されることがあります。また、誤検知であるかどうかわからない、潜在的なクエリの問題に対して情報レベルの注釈の追加配列が返されることがあります。正常に収集されたすべてのデータは、データフィールドで返されます。
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は無効を意味します。
time
パラメータが省略された場合、現在のサーバー時間が使用されます。
これらのパラメータは、POST
メソッドとContent-Type: application/x-www-form-urlencoded
ヘッダーを使用することで、リクエストボディに直接URLエンコードできます。これは、サーバー側のURL文字制限を超える可能性のある大規模なクエリを指定する場合に便利です。
クエリ結果のdata
セクションは以下の形式です。
{
"resultType": "matrix" | "vector" | "scalar" | "string",
"result": <value>
}
<value>
はクエリ結果データを指し、resultType
によって様々な形式があります。式クエリ結果フォーマットを参照してください。
次の例では、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は無効を意味します。
これらのパラメータは、POST
メソッドとContent-Type: application/x-www-form-urlencoded
ヘッダーを使用することで、リクエストボディに直接URLエンコードできます。これは、サーバー側のURL文字制限を超える可能性のある大規模なクエリを指定する場合に便利です。
クエリ結果のdata
セクションは以下の形式です。
{
"resultType": "matrix",
"result": <value>
}
<value>
プレースホルダーの形式については、範囲ベクトル結果形式を参照してください。
次の例では、30秒の範囲で式up
を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独自のウェブ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
セクションは、各時系列を識別するラベル名/値ペアを含むオブジェクトのリストで構成されます。
次の例では、セレクタ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
セクションは、文字列ラベル名のリストです。
例はこちらです。
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
セクションは、文字列ラベル値のリストです。
この例では、http_status_code
ラベルのすべてのラベル値をクエリします。
curl https://:9090/api/v1/label/http_status_code/values
{
"status" : "success",
"data" : [
"200",
"504"
]
}
ラベル名は、オプションでValues Escapingメソッドを使用してエンコードできます。名前が/
文字を含む場合、これは必須です。この方法で名前をエンコードするには:
- ラベルの前に
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_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": ""
}
]
}
}
Alertmanagers
次のエンドポイントは、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
}
]
}
}
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メトリクスプロトコルのレシーバーとして設定できます。これは効率的なサンプル取り込み方法とは見なされません。特定の低ボリュームのユースケースでは注意して使用してください。スクレイピングによる取り込みを置き換えるのには適していません。
OTLPレシーバーは--web.enable-otlp-receiver
を設定することで有効になります。有効になると、OTLPレシーバーのエンドポイントは/api/v1/otlp/v1/metrics
になります。
v2.47で新規追加
OTLP Delta
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
応答を返します。リスナーの最大数は、デフォルトで16の--web.max-notifications-subscribers
フラグで設定できます。
GET /api/v1/notifications/live
204 No Content
v3.0で新規追加