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

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>

Settings:

NameDefaultDescription
portnoneメトリクス公開用プロトコルを提供するポート。
endpoint/metricsPrometheus サーバーによるメトリクスのスクレイプ用 HTTP エンドポイント。/ から開始します。&lt;handlers&gt; セクションと組み合わせて使用しないでください。
url / headers / methodnoneリクエストにマッチするハンドラーを特定するために使用されるフィルター。同名フィールドを持つ &lt;http_handlers&gt; セクションと同様です。
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 設定で指定されたテーブル名にデータベース名が含まれていない場合に、そのテーブルが存在するデータベースの名前。

リモートリードプロトコル

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 設定で指定されたテーブルが存在するデータベース名。テーブル名にデータベース名が含まれていない場合に使用されます。

複数プロトコルの設定

複数のプロトコルを 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>