本文已经收录在 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"
}
}
复制代码
评论