メインコンテンツへスキップ
メインコンテンツへスキップ

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 からディメンショナルメトリクスを公開します。

確認(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
portnoneremote-write プロトコルを提供するポート。
url / headers / methodnoneリクエストに対して一致するハンドラーを見つけるために使用されるフィルター。同名フィールドについては、<http_handlers> セクションと同様。
tablenoneremote-write プロトコルで受信したデータを書き込む TimeSeries テーブルの名前。任意でデータベース名を含めることもできる。
databasenonetable 設定でデータベース名が指定されていない場合に、table 設定で指定されたテーブルが存在するデータベース名。

remote-read プロトコル

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
portnoneremote-read プロトコルを提供するためのポート。
url / headers / methodnoneリクエストに対して一致するハンドラーを見つけるために使用されるフィルター。<http_handlers> セクション内の同名フィールドと同様の意味を持ちます。
tablenoneremote-read プロトコルで送信するデータを読み取る対象の TimeSeries テーブル名。この名前には、オプションでデータベース名も含めることができます。
databasenonetable 設定で指定したテーブルについて、table 設定内でデータベース名を指定していない場合に、そのテーブルが存在するデータベース名。

複数プロトコルの設定

複数のプロトコルを 1 か所でまとめて指定できます。

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