メインコンテンツまでスキップ
メインコンテンツまでスキップ

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>

Section `<prometheus.handlers>` can be used to make more extended handlers.
This section is similar to [<http_handlers>](/interfaces/http) but works for prometheus protocols:

```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>

設定:

名称デフォルト説明
portなしメトリクスを公開するプロトコルのためのポート。
endpoint/metricsPrometheus サーバーがメトリクスをスクレイピングするための HTTP エンドポイント。/で始まります。<handlers> セクションとは併用しないでください。
url / headers / methodなしリクエストに対するマッチングハンドラを見つけるために使用されるフィルタ。<http_handlers> セクションの同名のフィールドと類似しています。
metricstruesystem.metrics テーブルからメトリクスを公開します。
asynchronous_metricstruesystem.asynchronous_metrics テーブルから現在のメトリクス値を公開します。
eventstruesystem.events テーブルからメトリクスを公開します。
errorstrue最後のサーバー再起動以来発生したエラーコードによるエラーの数を公開します。この情報は system.errors からも取得できます。
histogramstruesystem.histogram_metrics からヒストグラム メトリクスを公開します。
dimensional_metricstruesystem.dimensional_metrics から次元メトリクスを公開します。

チェック (ClickHouse サーバーの IP アドレスまたはホスト名で 127.0.0.1 を置き換えます):

curl 127.0.0.1:9363/metrics

リモート書き込みプロトコル

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>

設定:

名称デフォルト説明
portなしremote-write プロトコルを提供するためのポート。
url / headers / methodなしリクエストに対するマッチングハンドラを見つけるために使用されるフィルタ。<http_handlers> セクションの同名のフィールドと類似しています。
tableなしremote-write プロトコルで受信したデータを書き込む TimeSeries テーブルの名前。この名前にはオプションでデータベースの名前も含むことができます。
databaseなし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>

設定:

名称デフォルト説明
portなしremote-read プロトコルを提供するためのポート。
url / headers / methodなしリクエストに対するマッチングハンドラを見つけるために使用されるフィルタ。<http_handlers> セクションの同名のフィールドと類似しています。
tableなしremote-read プロトコルで送信するデータを読み取るための TimeSeries テーブルの名前。この名前にはオプションでデータベースの名前も含むことができます。
databaseなし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>