> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Prise en charge de l’API HTTP de Prometheus dans ClickHouse : écriture et lecture distantes, requêtes PromQL et métriques du serveur.

# Protocoles Prometheus et PromQL

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Non pris en charge par ClickHouse Cloud
        </a>;
};

<div id="expose">
  ## Exposer les métriques du serveur ClickHouse
</div>

<Note>
  Si vous utilisez ClickHouse Cloud, vous pouvez exposer des métriques à Prometheus à l’aide de l’[intégration Prometheus](/fr/products/cloud/features/monitoring/prometheus).
</Note>

Configurez un port dédié lorsqu’un serveur Prometheus doit collecter les propres métriques de ClickHouse :

```xml theme={null}
<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>
```

La section `<prometheus.handlers>` peut être utilisée pour créer des gestionnaires plus étendus sur le même port.
Cette section est similaire à [`<http_handlers>`](/fr/concepts/features/interfaces/http), mais fonctionne pour les protocoles Prometheus :

```xml theme={null}
<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>
                <labels>
                    <environment>production</environment>
                    <shard from_env="SHARD_NAME"></shard>
                </labels>
            </handler>
        </my_rule_1>
    </handlers>
</prometheus>
```

Paramètres :

| Nom                          | Par défaut | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ---------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `port`                       | none       | Port qui expose les métriques ClickHouse.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `endpoint`                   | `/metrics` | Endpoint HTTP pour le scraping des métriques. Commence par `/`. Ne doit pas être utilisé avec la section `<handlers>`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `url` / `headers` / `method` | none       | Filtres utilisés pour trouver un gestionnaire correspondant à une requête. Similaires aux champs portant les mêmes noms dans la section [`<http_handlers>`](/fr/concepts/features/interfaces/http).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `info`                       | true       | Expose la jauge `ClickHouse_Info` avec les libellés d’identité du serveur (`name`, `version`, `version_describe`, `version_major`, `version_minor`, `version_patch`).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `metrics`                    | true       | Expose les métriques de [`system.metrics`](/fr/reference/system-tables/metrics).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `asynchronous_metrics`       | true       | Expose les métriques de [`system.asynchronous_metrics`](/fr/reference/system-tables/asynchronous_metrics).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `events`                     | true       | Expose les métriques de [`system.events`](/fr/reference/system-tables/events).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `errors`                     | true       | Expose le nombre d’erreurs de [`system.errors`](/fr/reference/system-tables/errors).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `histograms`                 | true       | Expose les métriques de [`system.histogram_metrics`](/fr/reference/system-tables/histogram_metrics).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `dimensional_metrics`        | true       | Expose les métriques de [`system.dimensional_metrics`](/fr/reference/system-tables/dimensional_metrics).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `labels`                     | none       | Libellés constants ajoutés à chaque métrique exposée. Chaque élément enfant définit un libellé : le nom de l’élément est le nom du libellé (qui doit correspondre à `[a-zA-Z_][a-zA-Z0-9_]*`) et la valeur de l’élément est la valeur du libellé. Les valeurs de libellé prennent en charge les substitutions de config standard telles que l’attribut `from_env`. Un nom de libellé est rejeté lorsqu’il commence par `__` (réservé par Prometheus), ou lorsqu’il entrerait en conflit avec un libellé que cet endpoint exporte déjà pour l’une de ses sections activées. L’ensemble réservé dépend donc des données activement exportées par l’endpoint : `le` lorsque `histograms` est activé ; les libellés `ClickHouse_Info` (`name`, `version`, `version_describe`, `version_major`, `version_minor`, `version_patch`) lorsque `info` est activé ; et tout libellé utilisé par une famille de métriques d’histogramme ou dimensionnelles exposée (par exemple, `group`, `direction` ou `operation_type`) lorsque `histograms` ou `dimensional_metrics` est activé. Comme cela dépend de ce que l’endpoint expose réellement, un nom peut être valide sur un endpoint mais rejeté sur un autre. |

Vérifiez l’endpoint :

```bash theme={null}
curl http://127.0.0.1:9363/metrics
```

<CloudNotSupportedBadge />

<div id="prometheus-http-api-and-promql">
  ## API HTTP Prometheus et PromQL
</div>

ClickHouse implémente l’API HTTP Prometheus sur une table [`TimeSeries`](/fr/reference/engines/table-engines/integrations/time-series). Un gestionnaire prend en charge l’écriture distante, la lecture distante, les requêtes PromQL instantanées et les requêtes PromQL sur une plage.

<div id="prerequisites">
  ### Prérequis
</div>

Activez le paramètre [`allow_experimental_time_series_table`](/fr/reference/settings/session-settings/allow-experimental#allow_experimental_time_series_table) pour l’utilisateur qui crée la table et y accède :

```sql theme={null}
SET allow_experimental_time_series_table = 1;
```

Créez une base de données et une table `TimeSeries` :

```sql theme={null}
CREATE DATABASE prometheus;
CREATE TABLE prometheus.metrics ENGINE = TimeSeries;
```

Pour les requêtes d’API HTTP, activez `allow_experimental_time_series_table` dans le profil de l’utilisateur de l’API.

<div id="configure-prometheus-api">
  ### Configurer l’API Prometheus
</div>

Configurez un gestionnaire routé par préfixe sur le port HTTP principal de ClickHouse :

```xml theme={null}
<http_handlers>
    <defaults/>
    <rule>
        <url_prefix>/prometheus/api/v1</url_prefix>
        <handler>
            <type>prometheus_api_v1</type>
        </handler>
    </rule>
</http_handlers>
```

`<defaults/>` conserve les gestionnaires intégrés pour les endpoints tels que `/ping` et les requêtes SQL. Le préfixe ci-dessus expose ces endpoints via un seul gestionnaire :

| Endpoint                         | Rôle                          |
| -------------------------------- | ----------------------------- |
| `/prometheus/api/v1/write`       | Écriture distante Prometheus  |
| `/prometheus/api/v1/read`        | Lecture distante Prometheus   |
| `/prometheus/api/v1/query`       | Requêtes PromQL instantanées  |
| `/prometheus/api/v1/query_range` | Requêtes PromQL sur une plage |

L'exemple ne spécifie pas `database` ni `table` dans le gestionnaire. Chaque requête doit fournir le paramètre de requête `table`. Elle peut également fournir `database`, utiliser un nom de table qualifié tel que `prometheus.metrics` ou omettre la base de données afin d'utiliser `default`. Un même gestionnaire peut ainsi desservir plusieurs tables `TimeSeries`.

Pour utiliser une table fixe pour toutes les requêtes, configurez-la dans le gestionnaire :

```xml theme={null}
<handler>
    <type>prometheus_api_v1</type>
    <database>prometheus</database>
    <table>metrics</table>
</handler>
```

Une table configurée dans le gestionnaire ne peut pas être remplacée par des paramètres de requête.

Paramètres de routage et du gestionnaire :

| Nom          | Par défaut | Description                                                                                                                                                                                                                           |
| ------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url_prefix` | aucun      | Filtre qui correspond à tous les chemins de requête commençant par le préfixe configuré.                                                                                                                                              |
| `table`      | aucun      | Nom d'une table `TimeSeries`. Si ce paramètre est omis, la requête doit fournir le paramètre de requête `table`. Le nom configuré peut inclure une base de données.                                                                   |
| `database`   | aucun      | Base de données contenant la table. Une requête peut la fournir sous forme de paramètre de requête. Si ce paramètre est omis, ClickHouse utilise la base de données spécifiée dans une valeur `table` qualifiée ou utilise `default`. |

<div id="remote-write">
  ### Ingérer des métriques via écriture distante
</div>

ClickHouse prend en charge le [protocole écriture distante de Prometheus](https://prometheus.io/docs/specs/remote_write_spec/). Configurez Prometheus pour écrire vers le gestionnaire :

```yaml theme={null}
remote_write:
  - url: https://clickhouse.example.com:8443/prometheus/api/v1/write?database=prometheus&table=metrics
    basic_auth:
      username: default
      password: <password>
```

Prometheus envoie des échantillons dans la table `prometheus.metrics`.

<div id="promql-query-support">
  ### Interroger avec PromQL
</div>

Utilisez l’endpoint de requête instantanée pour évaluer une expression PromQL à un instant donné :

```bash theme={null}
curl --user default:<password> --get \
  "https://clickhouse.example.com:8443/prometheus/api/v1/query" \
  --data-urlencode "query=rate(http_requests_total[5m])" \
  --data-urlencode "database=prometheus" \
  --data-urlencode "table=metrics"
```

Utilisez l’endpoint de requête par plage pour évaluer une expression sur un intervalle de temps :

```bash theme={null}
curl --user default:<password> --get \
  "https://clickhouse.example.com:8443/prometheus/api/v1/query_range" \
  --data-urlencode "query=rate(http_requests_total[5m])" \
  --data-urlencode "start=2026-08-15T12:00:00Z" \
  --data-urlencode "end=2026-08-15T13:00:00Z" \
  --data-urlencode "step=60s" \
  --data-urlencode "database=prometheus" \
  --data-urlencode "table=metrics"
```

Consultez les [fonctionnalités PromQL prises en charge](/fr/reference/functions/table-functions/prometheusQueryRange#supported-promql-features) pour obtenir la liste des fonctions et des opérateurs d’agrégation utilisés par l’API HTTP, le dialecte `promql` et les fonctions de table.

<div id="grafana">
  #### Grafana
</div>

Configurez une source de données Prometheus avec une URL de base ne contenant pas `/api/v1` :

```yaml theme={null}
apiVersion: 1
datasources:
  - name: ClickHouse Prometheus
    type: prometheus
    access: proxy
    url: https://clickhouse.example.com:8443/prometheus
    basicAuth: true
    basicAuthUser: default
    jsonData:
      httpMethod: GET
      customQueryParameters: database=prometheus&table=metrics
    secureJsonData:
      basicAuthPassword: <password>
```

Grafana ajoute `/api/v1/query` ou `/api/v1/query_range` à cette URL de base et ajoute `customQueryParameters` à chaque requête.

<Note>
  Seuls les endpoints de requête `/api/v1/query` et `/api/v1/query_range` sont implémentés. Les endpoints de métadonnées utilisés par une source de données Prometheus dans Grafana pour parcourir les libellés, les variables de modèle et l’autocomplétion du générateur de requêtes (`/api/v1/series`, `/api/v1/labels`, `/api/v1/label/<name>/values`) ne sont pas implémentés et renvoient une erreur. Écrivez les expressions PromQL en mode code plutôt que d’utiliser le générateur de requêtes.
</Note>

<div id="sql-entry-points">
  #### Points d’entrée SQL
</div>

ClickHouse utilise le même convertisseur PromQL pour l’API HTTP, le dialecte `promql` ainsi que les fonctions de table [`prometheusQuery`](/fr/reference/functions/table-functions/prometheusQuery) et [`prometheusQueryRange`](/fr/reference/functions/table-functions/prometheusQueryRange).

Exécutez directement des requêtes PromQL avec `clickhouse-client` :

```bash theme={null}
clickhouse-client \
  --dialect promql \
  --promql_database prometheus \
  --promql_table metrics \
  --query 'rate(http_requests_total[5m])'
```

Utilisez les fonctions de table pour intégrer du PromQL dans une requête SQL :

```sql theme={null}
SELECT *
FROM prometheusQuery(
    prometheus.metrics,
    'rate(http_requests_total[5m])',
    now()
);
```

<div id="remote-read">
  ### Lire les métriques via lecture distante
</div>

ClickHouse prend en charge le [protocole lecture distante de Prometheus](https://prometheus.io/docs/prometheus/latest/querying/remote_read_api/) sur `/prometheus/api/v1/read`.

Configurez un serveur Prometheus pour lire les données de la même table `TimeSeries` :

```yaml theme={null}
remote_read:
  - url: https://clickhouse.example.com:8443/prometheus/api/v1/read?database=prometheus&table=metrics
    basic_auth:
      username: default
      password: <password>
```
