写点什么

Prometheus HTTP API 查询(六)Prometheus Server 状态和 TSDB 状态

作者:耳东@Erdong
  • 2021 年 11 月 12 日
  • 本文字数:2366 字

    阅读完需:约 8 分钟

本文已经收录在 Prometheus 合集 你真的会 Prometheus 查询吗?--PromQL 合集 中。


Prometheus 的二进制程序包启动以后实际上是启动了 2 个组件,分别是 Prometheus Server 和 TSDB 。这二者的状态我们都可以通过 HTTP API 查询来获取。

查询 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 是结束、完成。


发布于: 2021 年 11 月 12 日阅读数: 6
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Prometheus HTTP API 查询(六)Prometheus Server 状态和 TSDB 状态