跳到主要内容
跳到主要内容

Prometheus 协议

暴露指标

注意

如果使用 ClickHouse Cloud,可以通过 Prometheus Integration 将指标暴露给 Prometheus。

ClickHouse 可以将自身的指标暴露出来,以供 Prometheus 抓取:

<prometheus>
    <port>9363</port>
    <endpoint>/metrics</endpoint>
    <metrics>true</metrics>
    <asynchronous_metrics>true</asynchronous_metrics>
    <events>true</events>
    <errors>true</errors>
    <histograms>true</histograms>
    <dimensional_metrics>true</dimensional_metrics>
</prometheus>

可以使用 `<prometheus.handlers>` 部分来创建更多扩展处理器。
此部分类似于 [<http_handlers>](/interfaces/http),但用于 Prometheus 协议:

```xml
<prometheus>
    <port>9363</port>
    <handlers>
        <my_rule_1>
            <url>/metrics</url>
            <handler>
                <type>expose_metrics</type>
                <metrics>true</metrics>
                <asynchronous_metrics>true</asynchronous_metrics>
                <events>true</events>
                <errors>true</errors>
                <histograms>true</histograms>
                <dimensional_metrics>true</dimensional_metrics>
            </handler>
        </my_rule_1>
    </handlers>
</prometheus>

设置:

NameDefaultDescription
portnone用于对外提供指标协议服务的端口。
endpoint/metrics供 Prometheus 服务器抓取指标的 HTTP endpoint。必须以 / 开头。不应与 <handlers> 小节同时使用。
url / headers / methodnone用于根据请求查找匹配 handler 的过滤条件。与 <http_handlers> 小节中同名字段的含义相同。
metricstrue暴露 system.metrics 表中的指标。
asynchronous_metricstrue暴露 system.asynchronous_metrics 表中的当前指标值。
eventstrue暴露 system.events 表中的指标。
errorstrue暴露自上次服务器重启以来按错误码统计的错误次数。该信息也可以从 system.errors 表中获取。
histogramstrue暴露来自 system.histogram_metrics 的直方图指标。
dimensional_metricstrue暴露来自 system.dimensional_metrics 的维度指标。

检查(将 127.0.0.1 替换为 ClickHouse 服务器的 IP 地址或主机名):

curl 127.0.0.1:9363/metrics

Remote-write 协议

ClickHouse 支持 remote-write 协议。 通过该协议接收的数据会被写入一个 TimeSeries 表 (该表需要事先创建)。

<prometheus>
    <port>9363</port>
    <handlers>
        <my_rule_1>
            <url>/write</url>
            <handler>
                <type>remote_write</type>
                <database>db_name</database>
                <table>time_series_table</table>
            </handler>
        </my_rule_1>
    </handlers>
</prometheus>

Settings:

NameDefaultDescription
portnone用于提供 remote-write 协议服务的端口。
url / headers / methodnone用于为请求查找匹配处理器的筛选条件。类似于 <http_handlers> 部分中具有相同名称的字段。
tablenone用于写入通过 remote-write 协议接收数据的 TimeSeries 表名。该名称还可以选择性地包含数据库名称。
databasenonetable 设置中未指定数据库名称时,此处指定 table 设置中所述表所在的数据库名称。

远程读取协议

ClickHouse 支持 remote-read 协议。 数据从 TimeSeries 表中读取,并通过该协议进行传输。

<prometheus>
    <port>9363</port>
    <handlers>
        <my_rule_1>
            <url>/read</url>
            <handler>
                <type>remote_read</type>
                <database>db_name</database>
                <table>time_series_table</table>
            </handler>
        </my_rule_1>
    </handlers>
</prometheus>

Settings:

NameDefaultDescription
portnone用于提供 remote-read 协议服务的端口。
url / headers / methodnone用于为请求查找匹配的处理程序的过滤器。类似于 <http_handlers> 部分中同名字段。
tablenone通过 remote-read 协议发送数据时要读取数据的 TimeSeries 表名。该名称还可以可选地包含数据库名称。
databasenone如果在 table 设置中未指定数据库名称,则此处为包含该表的数据库名称。

多协议配置

可以在同一个位置同时指定多个协议:

<prometheus>
    <port>9363</port>
    <handlers>
        <my_rule_1>
            <url>/metrics</url>
            <handler>
                <type>expose_metrics</type>
                <metrics>true</metrics>
                <asynchronous_metrics>true</asynchronous_metrics>
                <events>true</events>
                <errors>true</errors>
                <histograms>true</histograms>
                <dimensional_metrics>true</dimensional_metrics>
            </handler>
        </my_rule_1>
        <my_rule_2>
            <url>/write</url>
            <handler>
                <type>remote_write</type>
                <table>db_name.time_series_table</table>
            </handler>
        </my_rule_2>
        <my_rule_3>
            <url>/read</url>
            <handler>
                <type>remote_read</type>
                <table>db_name.time_series_table</table>
            </handler>
        </my_rule_3>
    </handlers>
</prometheus>