本文已经收录在 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 版本以后才有的。
整体的结果以 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 开始这个接口才正式启用。
接口返回的信息会包含以下指标
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" }}
复制代码
评论