查询 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

results matching ""

    No results matching ""