查询 Prometheus 管理员接口
Prometheus 有很多接口可以查询自己的状态,这些接口可以用在不同的场景里。
查看配置
通过这个接口可以看到 Prometheus 当前加载生效的配置文件。
GET /api/v1/status/config
配置文件会以 YAML 格式返回,并且由于 YAML 库文件的限制,原始文件中所有注释的内容都不会出现在这个文件里。
$ curl http://localhost:9090/api/v1/status/config
{
"status": "success",
"data": {
"yaml": "<content of the loaded config file in YAML>",
}
}
查看 Prometheus 参数
Prometheus 启动以后会有很多参数以指定值或者缺省值的方式生效,这个接口可以查看 Prometheus 的这些参数和对应的值。这个接口在 v2.2 版本以后才有的。
GET /api/v1/status/flags
整体的结果以 JSON 格式返回,启动的参数以 key/value 形式展示。
$ 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",
...
}
}
运行信息
Prometheus 在启动后我们可以通过这个接口来查看他的运行信息,比如启动时间、最后一次加载配置的时间、Go 进程的数量等等这些信息。这个接口要在 v2.14 版本以后才会有。
GET /api/v1/status/runtimeinfo
整体的结果以 JSON 格式返回,运行的以 key/value 形式展示,每种值的数据类型也不同。另外这个接口返回的内容随着 Prometheus 版本的不同会有一定的差异。
$ curl http://localhost:9090/api/v1/status/runtimeinfo
{
"status":"success",
"data":{
"startTime":"2021-11-09T15:27:20.210039183Z",
"CWD":"/prometheus",
"reloadConfigSuccess":true,
"lastConfigTime":"2021-11-11T10:38:18Z",
"corruptionCount":0,
"goroutineCount":209,
"GOMAXPROCS":40,
"GOGC":"",
"GODEBUG":"",
"storageRetention":"10d"
}
}
构建信息
这个接口会返回 Prometheus 的构建信息,包括当前版本、Git Commit ID、Git 分支名称、构建时间、构建人、Go 的版本等信息,这个接口是在 v2.14 以后才有的。
GET /api/v1/status/buildinfo
所有的结束会以 JSON 的 格式返回。
$ curl http://localhost:9090/api/v1/status/buildinfo
{
"status":"success",
"data":{
"version":"2.29.1",
"revision":"dcb07e8eac34b5ea37cd229545000b857f1c1637",
"branch":"HEAD",
"buildUser":"root@364730518a4e",
"buildDate":"20210811-14:48:27",
"goVersion":"go1.16.7"
}
}
TSDB 状态
TSDB 状态
这个接口会返回关于 Prometheus TSDB 的各种基数统计信息,从 v2.15 开始这个接口才正式启用。
GET /api/v1/status/tsdb
接口返回的信息会包含以下指标
- headStats: 提供了 TSDB 数据块的 head 信息
- numSeries: serie 的数量.
- chunkCount: chunk 的数量.
- minTime: 当前最小时间戳,单位是毫秒.
- maxTime: 当前最大时间戳,单位是毫秒.
- seriesCountByMetricName: 这将提供指标名称及其 serie 计数的列表。
- labelValueCountByLabelName: 这将提供 Label 名称及其值计数的列表。
- memoryInBytesByLabelName : 这将提供一个 Label 名称列表和内存使用情况。内存使用情况是通过将给定 Label 名称的所有值的长度相加来计算的。
- seriesCountByLabelPair : 这将提供 Label 值对及其 serie 计数的列表
$ curl http://localhost: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
}
]
}
}
WAL Reply 状态
这是一个比较新的接口,从 v2.28 才开始使用,这个接口会返回 TSDB WALReply 的状态。
GET /api/v1/status/walreplay
$ curl http://localhost:9090/api/v1/status/walreplay
{
"status":"success",
"data":{
"min":11704,
"max":11708,
"current":11708,
"state": "in progress"
}
}
- read : 到目前为止 Replay 的片段数
- total: 需要 replayed 的总数
- progress: repay 的进度,0 - 100% 。
- state: repay 的状态,可能会从在这几种,waiting、in progress、done 。也有可能不显示状态信息。 waiting 是等待启动。 in progress 是进行中,done 是结束、完成。
Prometheus 管理员接口
Prometheus 现在有 一些接口是专门给管理员使用的,这些接口默认是不开启的,需要在启动的时候使用 --web.enable-admin-api
来打开。这些接口分为操作类和查询类。
快照
快照接口可以针对当前的数据创建一个快照,这个创建好的快照会存储在 TSDB 的数据目录下的 snapshots/<datetime>-<rand>
,并且将创建好的目录通过 HTTP 的 response 返回。它可以选择性地跳过只出现在头块中、还没有压缩到磁盘的快照数据。
POST /api/v1/admin/tsdb/snapshot
PUT /api/v1/admin/tsdb/snapshot
这个接口有一个 URL 参数 skip_head=<bool>
,这个参数是可选的,通过这个参数可以跳过头块中的数据。
$ curl -X POST http://localhost:9090/api/v1/admin/tsdb/snapshot
{
"status": "success",
"data": {
"name": "20171210T211224Z-2be650b6d019eb54"
}
}
通过这个响应我们可以知道快照会存放在 <data-dir>/snapshots/20171210T211224Z-2be650b6d019eb54
。
这个接口在 v2.1 版本以后才可以使用,在 v2.9 版本以后才支持 PUT 模式。
删除 Series
这个接口会删除时间范围内一系列选择的数据。执行操作以后,实际数据仍然存在于磁盘上,并没有被删除,在以后的压缩中会被清理。如果想要立即清理那么可以通过 Clean Tombstones
来立即删除。
如果接口执行成功,返回的 HTTP 代码是 204 。
POST /api/v1/admin/tsdb/delete_series
PUT /api/v1/admin/tsdb/delete_series
这个接口有三个 URL 参数可以使用。
- match[]=
:选择要删除的 Series 的重复标签匹配器参数。及要删除的指标,这个参数是个必要参数,最少提交一个才可以。 - start=
: 开始时间戳。缺省是最小的时间值。 - end=
:结束时间戳。缺省是最大的时间值。
不同时提到开始和结束时间将清除数据库中匹配序列的所有数据。
$ curl -X POST \
-g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]=up&match[]=process_start_time_seconds{job="prometheus"}'
这个接口在 v2.1 版本以后才可以使用,在 v2.9 版本以后才支持 PUT 模式。
清理 Tombstones
CleanTombstones 会将要删除的数据从磁盘上删除,并清除现有的 Tombstones 。这可以在删除序列后使用,以释放空间。
POST /api/v1/admin/tsdb/clean_tombstones
PUT /api/v1/admin/tsdb/clean_tombstones
这个接口没有参数,也没有 HTTP 的 body 。
$ curl -X POST http://localhost:9090/api/v1/admin/tsdb/clean_tombstones
这个接口在 v2.1 版本以后才可以使用,在 v2.9 版本以后才支持 PUT 模式。
健康检查
Prometheus 提供了一个接口,这个接口会在 Prometheus 处于健康状态的时候返回 200 。
GET /-/healthy
服务准备检查
Prometheus 提供了一个接口,这个接口会在 Prometheus 处于可以提供服务的时候返回 200 。
GET /-/ready
重新加载配置
Prometheus 提供了一个接口,这个接口会在重新加载 Prometheus 的配置文件,这个时候在 Prometheus 数据文件特别大的时候特别有用,TSDB 太大以后重新启动 Prometheus Server 会耗费大量的时间,而重新加载配置会特别快 。
想要使用这个接口需要在启动 Prometheus 的时候使用 --web.enable-lifecycle
参数来打开这个功能。
或者,可以通过向 Prometheus 进程发送 SIGHUP
信号来触发重新加载配置。
PUT /-/reload
POST /-/reload
退出
这个接口会触发 Prometheus 进行优雅关闭它自己。这个接口默认禁用的,可以通过--web.enable-lifecycle
参数来打开这个功能。
或者,可以通过向 Prometheus 进程发送 SIGTERM
信号来触发优雅的关闭。
PUT /-/quit
POST /-/quit