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>: ブール値(文字列truefalse)。

注: 繰り返される可能性のあるクエリパラメータ名は[]で終わります。

式クエリ

クエリ言語式は、単一の時点または時間範囲で評価できます。以下のセクションでは、各タイプの式クエリの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はNaNInf-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でソートされて返されます。sortsort_by_labelのような関数は、範囲ベクトルには効果がありません。

インスタントベクトル

インスタントベクトルは結果タイプvectorとして返されます。対応するresultプロパティは次の形式です。

[
  {
    "metric": { "<label_name>": "<label_value>", ... },
    "value": [ <unix_time>, "<sample_value>" ],
    "histogram": [ <unix_time>, <histogram> ]
  },
  ...
]

各時系列には、"value"キーまたは"histogram"キーのいずれかを含めることができますが、両方を含めることはできません。

sortsort_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=activestate=droppedstate=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で新規追加

このページの内容