一、格式概述
API返回是JSON格式,每个请求成功的返回值都是以2xx开头的编码。如果API处理的是无效请求,返回一个JSON错误对象,并返回下面的错误码:
- 400 Bad Request。当参数错误或者丢失时。
- 422 Unprocessable Entity。当一个表达式不能被执行时。
- 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 if there were warnings while executing the request. // There will still be data in the data field. \"warnings\": [\"<string>\"] }
可以以[]结尾的查询参数的名称。
- <series_selector>占位符:指的是Prometheus时间序列选择器,如http_requests_total或http_requests_total{method =〜\”(GET|POST)\”},需要进行URL编码。
- <duration>占位符:指的是[0-9]+[smhdwy]形式的Prometheus持续时间字符串。 例如,5m指的是5分钟的持续时间。
- <bool>占位符:指的是引用布尔值(字符串true和false)。
二、表达式查询
可以在单个时刻或在一段时间内评估查询语言表达。 以下部分描述了每种表达式查询的API端点。
2.1 Instant queries(即时查询)
以下端点在单个时间点评估即时查询:
GET /api/v1/query
- query=<string>: Prometheus表达式查询字符串。
- time=<rfc3339 | uninx_timestamp>: 执行时间戳,可选项。
- timeout=<duration>: 执行超时时间设置,可选项,默认由-query.timeout标志设置
如果time缺省,则用当前服务器时间表示执行时刻。这个查询结果的data部分有下面格式:
{ \"resultType\": \"matrix\" | \"vector\" | \"scalar\" | \"string\", \"result\": <value> }
<value>是一个查询结果数据,依赖于这个resultType格式,见表达式查询结果格式。
下面例子执行了在时刻是2015-07-01T20:10:51.781Z的up表达式:
$ curl \'http://localhost: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\" ] } ] } }
2.2 范围查询
以下端点在一段时间内评估表达式查询:
GET /api/v1/query_range
- query=<string>: Prometheus表达式查询字符串。
- start=<rfc3339 | unix_timestamp>: 开始时间戳。
- end=<rfc3339 | unix_timestamp>: 结束时间戳。
- step=<duration>: 以持续时间格式查询分辨率步长或浮点秒数。
- timeout=<duration>:评估超时。 可选的。 默认为-query.timeout标志的值并受其限制。
查询结果的数据部分具有以下格式:
{ \"resultType\": \"matrix\", \"result\": <value> }
对于<value>占位符的格式,详见范围向量结果格式。以下示例在30秒范围内评估表达式,查询分辨率为15秒。
$ curl \'http://localhost: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\" ] ] } ] } }
三、查询元数据
3.1 通过标签匹配器找到度量指标列表
以下端点返回与特定标签集匹配的时间系列列表:
GET /api/v1/series POST /api/v1/series
- match[]=<series_selector>: 选择器是series_selector,这个参数个数必须大于等于1.
- start=<rfc3339 | unix_timestamp>: 开始时间戳。
- end=<rfc3339 | unix_timestamp>: 结束时间戳。
查询结果的data部分包含一个对象列表,这些对象包含标识每个系列的标签名称/值对。
下面例子返回时间序列数据, 选择器是up或者process_start_time_seconds{job=\”prometheus\”}:
$ curl -g \'http://localhost:9090/api/v1/series?match[]=up&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\" } ] }
3.2 查询标签名
以下端点返回标签名称的列表:
GET /api/v1/labels POST /api/v1/labels
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\" ] }
3.3 查询标签值
以下端点返回提供的标签名称的标签值列表:
GET /api/v1/label/<label_name>/values
JSON响应的data部分是字符串标签值的列表。此示例查询作业标签的所有标签值:
$ curl http://localhost:9090/api/v1/label/job/values { \"status\" : \"success\", \"data\" : [ \"node\", \"prometheus\" ] }
四、表达式查询结果格式
表达式查询可能会在data部分的result属性中返回以下响应值。 <sample_value>占位符是数字样本值。 JSON不支持特殊的浮点值,例如NaN,Inf和-Inf,因此样本值将作为带引号的JSON字符串而不是原始数字传输。
4.1 范围向量
范围向量返回的result类型是一个matrix矩阵。下面返回的结果是result部分的数据格式:
[ { \"metric\": { \"<label_name>\": \"<label_value>\", ... }, \"values\": [ [ <unix_time>, \"<sample_value>\" ], ... ] }, ... ]
4.2 瞬时向量
瞬时向量的result类型是vector。下面是result部分的数据格式:
[ { \"metric\": { \"<label_name>\": \"<label_value>\", ... }, \"value\": [ <unix_time>, \"<sample_value>\" ] }, ... ]
4.3 Scalars标量
标量查询返回result类型是scalar。下面是result部分的数据格式:
[ <unix_time>, \"<scalar_value>\" ]
4.4 字符串
字符串的result类型是string。下面是result部分的数据格式:
[ <unix_time>, \"<string_value>\" ]
五、Targets目标
以下端点返回Prometheus目标发现的当前状态概述:
GET /api/v1/targets
活动目标和删除目标都是响应的一部分。 labels表示重新标记发生后的标签集,discoveredLabels表示在发生重新标记之前在服务发现期间检索到的未修改标签。
$ curl http://localhost: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\" }, \"scrapeUrl\": \"http://127.0.0.1:9090/metrics\", \"lastError\": \"\", \"lastScrape\": \"2017-01-17T15:07:44.723715405+01:00\", \"health\": \"up\" } ], \"droppedTargets\": [ { \"discoveredLabels\": { \"__address__\": \"127.0.0.1:9100\", \"__metrics_path__\": \"/metrics\", \"__scheme__\": \"http\", \"job\": \"node\" }, } ] } }
六、Rules规则
/rules API端点返回当前加载的警报和记录规则列表。 此外,它还返回由每个警报规则的Prometheus实例触发的当前活动警报。由于/rules端点相当新,它没有与总体API v1相同的稳定性保证。
GET /api/v1/rules
$ curl http://localhost: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\": 1 } ], \"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(http_inprogress_requests) by (job)\", \"type\": \"recording\" } ], \"file\": \"/rules.yaml\", \"interval\": 60, \"name\": \"example\" } ] }, \"status\": \"success\" }
七、Alerts报警
/alerts端点返回所有活动警报的列表。由于/alerts端点相当新,它没有与总体API v1相同的稳定性保证。
GET /api/v1/alerts
$ curl http://localhost:9090/api/v1/alerts { \"data\": { \"alerts\": [ { \"activeAt\": \"2018-07-04T20:27:12.60602144+02:00\", \"annotations\": {}, \"labels\": { \"alertname\": \"my-alert\" }, \"state\": \"firing\", \"value\": 1 } ] }, \"status\": \"success\" }
八、查询目标元数据
以下端点返回有关目标正在刮取的度量标准的元数据。 这是实验性的,将来可能会发生变化。
GET /api/v1/targets/metadata
- match_target=<label_selectors>:通过标签集匹配目标的标签选择器。 如果留空则选择所有目标。
- metric=<string>:用于检索元数据的度量标准名称。 如果留空,则检索所有度量标准元数据。
- limit=<number>:要匹配的最大目标数。
查询结果的data部分包含一个包含度量元数据和目标标签集的对象列表。以下示例从前两个目标返回go_goroutines指标的所有元数据条目,标签为job =\”prometheus\”。
curl -G http://localhost: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 http://localhost: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\": \"\" }, // ... ] }
九、Altermanagers警报管理器
以下端点返回Prometheus alertmanager发现的当前状态概述:
GET /api/v1/alertmanagers
活动和丢弃的Alertmanagers都是响应的一部分:
$ curl http://localhost: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\" } ] } }
十、Status状态
以下状态端点显示当前的Prometheus配置。
10.1 Config配置
以下端点返回当前加载的配置文件:
GET /api/v1/status/config
配置作为转储的YAML文件返回。 由于YAML库的限制,不包括YAML注释。
$ curl http://localhost:9090/api/v1/status/config { \"status\": \"success\", \"data\": { \"yaml\": \"<content of the loaded config file in YAML>\", } }
10.2 Flags标志
以下端点返回Prometheus配置的标志值:
GET /api/v1/status/flags
所有值都以“字符串”的形式出现。
$ curl http://localhost: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\", ... } }
10.3 运行时信息
以下端点返回有关Prometheus服务器的各种运行时信息属性:
GET /api/v1/status/runtimeinfo
返回的值具有不同的类型,具体取决于运行时属性的性质。
$ curl http://localhost:9090/api/v1/status/runtimeinfo { \"status\": \"success\", \"data\": { \"startTime\": \"2019-11-02T17:23:59.301361365+01:00\", \"CWD\": \"/\", \"reloadConfigSuccess\": true, \"lastConfigTime\": \"2019-11-02T17:23:59+01:00\", \"chunkCount\": 873, \"timeSeriesCount\": 873, \"corruptionCount\": 0, \"goroutineCount\": 48, \"GOMAXPROCS\": 4, \"GOGC\": \"\", \"GODEBUG\": \"\", \"storageRetention\": \"15d\" } }
注意:在Prometheus版本之间,确切返回的运行时属性可能会更改
10.4 Build信息
以下端点返回有关Prometheus服务器的各种构建信息属性:
GET /api/v1/status/buildinfo
所有值都的结果类型是字符串:
$ curl http://localhost: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版本之间,返回的确切构建属性可能会更改
十一、TSDB Admin APIs,TSDB管理API
这些是为高级用户公开数据库功能的API。 除非设置了–web.enable-admin-api,否则不会启用这些API。我们还公开了一个gRPC API,其定义可以在这里找到。 这是实验性的,将来可能会发生变化。
11.1 快照
快照会将所有当前数据的快照创建到TSDB数据目录下的snapshots/<datetime>-<rand>中,并将该目录作为响应返回。 它可以选择跳过仅存在于头块中但尚未压缩到磁盘的快照数据。
POST /api/v1/admin/tsdb/snapshot?skip_head=<bool>
$ curl -XPOST http://localhost:9090/api/v1/admin/tsdb/snapshot { \"status\": \"success\", \"data\": { \"name\": \"20171210T211224Z-2be650b6d019eb54\" } }
快照已存在<data-dir>/snapshots/20171210T211224Z-2be650b6d019eb54
11.2 删除序列
DeleteSeries删除时间范围内所选系列的数据。 实际数据仍然存在于磁盘上,并在将来的压缩中清除,或者可以通过点击Clean Tombstones端点来明确清理。
如果成功,则返回204。
POST /api/v1/admin/tsdb/delete_series
- match[]=<series_selector>:选择要删除的系列的重复标签匹配器参数。 必须至少提供一个match[]参数。
- start= <rfc3339 | unix_timestamp>:开始时间戳。 可选,默认为最短可能时间。
- end= <rfc3339 | unix_timestamp>:结束时间戳。 可选,默认为最长可能时间。
不提及开始和结束时间将清除数据库中匹配系列的所有数据。例:
$ curl -X POST \\ -g \'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]=up&match[]=process_start_time_seconds{job=\"prometheus\"}\'
11.3 CleanTombstones
CleanTombstones从磁盘中删除已删除的数据并清理现有的逻辑删除。 这可以在删除系列后使用以释放空间。如果成功,则返回204。
POST /api/v1/admin/tsdb/clean_tombstones
这不需要参数或正文:
$ curl -XPOST http://localhost:9090/api/v1/admin/tsdb/clean_tombstones
管理API
Prometheus提供了一组管理API,以简化自动化和集成
1.1 监控检测
GET /-/healthy
始终返回200,应用于检查Prometheus的运行状况。
1.2 准备检查
GET /-/ready
当Prometheus准备服务流量(即响应查询)时,此端点返回200。
1.3 重载
PUT /-/reload POST /-/reload OR kill -HUP pid curl -X POST http://IP/-/reload
该端点触发Prometheus配置和规则文件的重新加载。 默认情况下它是禁用的,可以通过–web.enable-lifecycle标志启用。或者,可以通过将SIGHUP发送到Prometheus进程来触发配置重载。
1.4 退出
PUT /-/quit POST /-/quit
该端点触发Prometheus的正常关闭。 默认情况下它是禁用的,可以通过–web.enable-lifecycle标志启用。或者,可以通过将SIGTERM发送到Prometheus进程来触发正常关闭。