暴露 ClickHouse 服务器指标
如果你使用的是 ClickHouse Cloud,可以通过 Prometheus 集成 向 Prometheus 暴露指标。
<prometheus.handlers> 部分可用于在同一端口上配置更复杂的处理程序。
该部分与 <http_handlers> 类似,但适用于 Prometheus 协议:
检查端点:
Prometheus HTTP API 和 PromQL
TimeSeries 表实现 Prometheus HTTP API。一个处理程序可处理 远程写入、远程读取、即时 PromQL 查询和范围 PromQL 查询。
前置条件
allow_experimental_time_series_table 设置:
TimeSeries 表:
allow_experimental_time_series_table。
配置 Prometheus API
<defaults/> 会保留 /ping 等端点和 SQL 请求的内置处理程序。上述前缀通过一个处理程序公开这些端点:
该示例未在处理程序中指定
database 和 table。每个请求都必须提供 table 查询参数。还可以提供 database、使用如 prometheus.metrics 这样的限定表名,或者省略数据库以使用 default。这样,一个处理程序即可为多个 TimeSeries 表提供服务。
若要让所有请求使用同一个固定表,请在处理程序中进行配置:
通过 远程写入 摄取指标
prometheus.metrics 表。
要将多个并发远程写入请求中的数据合并为更少的 parts,请在 URL 中添加 async_insert 设置 (或在 user profile 中启用该设置) ,以启用异步插入:
TimeSeries 表的所有内部表后,才会确认异步远程写入请求,不受 wait_for_async_insert 设置影响:远程写入协议将已确认的写入视为持久化写入。如果刷新失败,请求会返回错误,Prometheus 将重试。
使用 PromQL 查询
promql 方言及表函数支持的函数和聚合运算符列表,请参阅支持的 PromQL 功能。
Grafana
/api/v1 之前的部分结尾:
/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[] 序列选择器,支持可选的 start、end 和 limit 参数,并返回每个选择器匹配的序列的并集。/api/v1/labels 接受相同的参数,其中 match[] 为可选项,并返回匹配的序列的已排序标记名称 (未提供选择器时则返回所有序列的标记名称) 。Grafana Prometheus 数据源用于浏览标记、模板变量和查询构建器自动补全的标记值端点 (/api/v1/label/<name>/values) 尚未实现,调用时会返回错误。请使用代码模式编写 PromQL 表达式,而不要使用查询构建器。SQL 入口
promql 方言以及 prometheusQuery 和 prometheusQueryRange 表函数均使用同一个 PromQL 转换器。
使用 clickhouse-client 直接执行 PromQL:
查询指标元数据
/prometheus/api/v1/metadata 端点返回存储在 TimeSeries 表的 Metrics 目标表中的指标元数据,包括每个指标族的类型、帮助文本和单位。它支持 URL 查询字符串中的以下 Prometheus 参数:
默认的
Metrics 目标表是按指标族名称排序的 ReplacingMergeTree:它会保留每个指标族最近写入的元数据条目。只有在目标表仍保留这些条目时,才会返回每个指标族的多个条目——例如在其 parts 合并之前,或该表使用会保留这些条目的引擎时。
通过远程读取读取指标
/prometheus/api/v1/read 提供对 Prometheus 远程读取协议的支持。
配置 Prometheus 服务器从同一个 TimeSeries 表中读取数据: