查询 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_selector> :选择要删除的 Series 的重复标签匹配器参数。及要删除的指标,这个参数是个必要参数,最少提交一个才可以。
* 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"}'

这个接口在 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

```

results matching ""

    No results matching ""