Skip to main content

暴露 ClickHouse 服务器指标

如果你使用的是 ClickHouse Cloud,可以通过 Prometheus 集成 向 Prometheus 暴露指标。
当 Prometheus 服务器需要抓取 ClickHouse 自身指标时,请配置专用端口:
<prometheus.handlers> 部分可用于在同一端口上配置更复杂的处理程序。 该部分与 <http_handlers> 类似,但适用于 Prometheus 协议:
设置: 检查端点:

Prometheus HTTP API 和 PromQL

ClickHouse 基于 TimeSeries 表实现 Prometheus HTTP API。一个处理程序可处理 远程写入、远程读取、即时 PromQL 查询和范围 PromQL 查询。

前置条件

为创建和访问该表的用户启用 allow_experimental_time_series_table 设置:
创建数据库和 TimeSeries 表:
对于 HTTP API 请求,请在 API 用户的 profile 中启用 allow_experimental_time_series_table

配置 Prometheus API

在主 ClickHouse HTTP 端口上配置一个按前缀路由的处理程序:
<defaults/> 会保留 /ping 等端点和 SQL 请求的内置处理程序。上述前缀通过一个处理程序公开这些端点: 该示例未在处理程序中指定 databasetable。每个请求都必须提供 table 查询参数。还可以提供 database、使用如 prometheus.metrics 这样的限定表名,或者省略数据库以使用 default。这样,一个处理程序即可为多个 TimeSeries 表提供服务。 若要让所有请求使用同一个固定表,请在处理程序中进行配置:
在 处理程序 中配置的表不能被请求参数覆盖。 路由和 处理程序 设置:

通过 远程写入 摄取指标

ClickHouse 支持 Prometheus 远程写入 协议。配置 Prometheus 以向该处理程序写入数据:
Prometheus 会将样本写入 prometheus.metrics 表。 要将多个并发远程写入请求中的数据合并为更少的 parts,请在 URL 中添加 async_insert 设置 (或在 user profile 中启用该设置) ,以启用异步插入
ClickHouse 仅在数据已刷新到 TimeSeries 表的所有内部表后,才会确认异步远程写入请求,不受 wait_for_async_insert 设置影响:远程写入协议将已确认的写入视为持久化写入。如果刷新失败,请求会返回错误,Prometheus 将重试。

使用 PromQL 查询

使用即时查询端点,在某一时间点评估 PromQL 表达式:
使用范围查询端点计算指定时间范围内的表达式:
有关 HTTP API、promql 方言及表函数支持的函数和聚合运算符列表,请参阅支持的 PromQL 功能

Grafana

配置 Prometheus 数据源时,基础 URL 应以 /api/v1 之前的部分结尾:
Grafana 会将 /api/v1/query/api/v1/query_range 追加到此基础 URL,并在每个请求中添加 customQueryParameters
目前仅实现了查询端点 /api/v1/query/api/v1/query_range 以及元数据端点 /api/v1/series/api/v1/labels/api/v1/metadata/api/v1/series 至少需要一个 match[] 序列选择器,支持可选的 startendlimit 参数,并返回每个选择器匹配的序列的并集。/api/v1/labels 接受相同的参数,其中 match[] 为可选项,并返回匹配的序列的已排序标记名称 (未提供选择器时则返回所有序列的标记名称) 。Grafana Prometheus 数据源用于浏览标记、模板变量和查询构建器自动补全的标记值端点 (/api/v1/label/<name>/values) 尚未实现,调用时会返回错误。请使用代码模式编写 PromQL 表达式,而不要使用查询构建器。

SQL 入口

ClickHouse 的 HTTP API、promql 方言以及 prometheusQueryprometheusQueryRange 表函数均使用同一个 PromQL 转换器。 使用 clickhouse-client 直接执行 PromQL:
使用表函数在 SQL 查询中嵌入 PromQL:

查询指标元数据

/prometheus/api/v1/metadata 端点返回存储在 TimeSeries 表的 Metrics 目标表中的指标元数据,包括每个指标族的类型、帮助文本和单位。它支持 URL 查询字符串中的以下 Prometheus 参数: 默认的 Metrics 目标表是按指标族名称排序的 ReplacingMergeTree:它会保留每个指标族最近写入的元数据条目。只有在目标表仍保留这些条目时,才会返回每个指标族的多个条目——例如在其 parts 合并之前,或该表使用会保留这些条目的引擎时。

通过远程读取读取指标

ClickHouse 在 /prometheus/api/v1/read 提供对 Prometheus 远程读取协议的支持。 配置 Prometheus 服务器从同一个 TimeSeries 表中读取数据:
最后修改于 2026年8月28日