TimeSeries. 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.
Pour exposer les métriques propres à ClickHouse afin qu’un serveur Prometheus puisse les collecter, consultez l’endpoint de métriques Prometheus.
Prérequis
Les étapes de configuration diffèrent entre ClickHouse Cloud et ClickHouse self-managed. Suivez la section correspondant à votre déploiement.ClickHouse Cloud
La prise en charge de PromQL dans ClickHouse Cloud est en private preview. Les services qui participent à la private preview disposent déjà du paramètre
enable_time_series_table et des points de terminaison de l’API Prometheus configurés. Les autres services ClickHouse Cloud n’ont pas cette configuration, et vous ne pouvez pas activer cette fonctionnalité vous-même sur un tel service. L’instruction SET enable_time_series_table et la configuration http_handlers décrites dans les sections suivantes s’appliquent aux déploiements self-managed.Self-managed : activer le paramètre TimeSeries
Activez le paramètreenable_time_series_table pour l’utilisateur qui crée la table et y accède :
enable_time_series_table dans le profil de l’utilisateur de l’API.
Self-managed : configurer les points de terminaison de l’API Prometheus
Configurez un gestionnaire routé par préfixe sur le port HTTP principal de ClickHouse :<defaults/> conserve les gestionnaires intégrés pour les points de terminaison de l’API tels que /ping et les requêtes SQL. Le préfixe ci-dessus expose ces points de terminaison de l’API via un seul gestionnaire :
L’exemple ne spécifie pas
database ni table dans le gestionnaire. Chaque requête doit fournir le paramètre de requête table (sauf pour /format_query, qui se contente d’analyser l’expression PromQL fournie et n’a pas besoin de 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 :
Créer une table TimeSeries
Créez une base de données et une tableTimeSeries :
Ingérer des métriques via écriture distante
ClickHouse prend en charge le protocole écriture distante de Prometheus. Configurez Prometheus pour écrire vers le gestionnaire :prometheus.metrics.
Pour regrouper les données issues de nombreuses requêtes d’écriture distante concurrentes en un nombre réduit de parties, activez les insertions asynchrones en ajoutant le paramètre async_insert à l’URL (ou en l’activant dans le profil utilisateur) :
TimeSeries, indépendamment du paramètre wait_for_async_insert : le protocole d’écriture distante considère comme durable toute écriture dont réception a été accusée. Si l’écriture échoue, la requête renvoie une erreur et Prometheus la réessaie.
Interroger avec PromQL
Utilisez l’endpoint de requête instantanée pour évaluer une expression PromQL à un instant donné :--get, curl envoie les paramètres au format application/x-www-form-urlencoded via POST :
sum by (job) (http_requests_total{code="200"}) / 2. Cet endpoint n’évalue pas l’expression, il n’a donc pas besoin des paramètres database et table.
Consultez les fonctionnalités PromQL prises en charge 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.
Grafana
Configurez une source de données Prometheus avec une URL de base ne contenant pas/api/v1 :
/api/v1/query ou /api/v1/query_range à cette URL de base et ajoute customQueryParameters à chaque requête.
Avec httpMethod: POST, Grafana envoie les paramètres de requête dans le corps de la requête. ClickHouse lit le corps de la requête ainsi que la chaîne de requête de l’URL, de sorte que customQueryParameters s’applique toujours. Utilisez POST pour les expressions PromQL longues, car une URL a une limite de longueur.
Seuls les endpoints de requête
/api/v1/query, /api/v1/query_range et /api/v1/format_query, ainsi que les endpoints de métadonnées /api/v1/series, /api/v1/labels, /api/v1/label/<name>/values et /api/v1/metadata, sont implémentés. /api/v1/series nécessite au moins un sélecteur de séries match[], prend en charge les paramètres facultatifs start, end et limit, et renvoie l’union des séries correspondant à chaque sélecteur. /api/v1/labels accepte les mêmes paramètres, match[] étant facultatif, et renvoie les noms de libellés triés des séries correspondantes (ou de toutes les séries lorsqu’aucun sélecteur n’est fourni). /api/v1/label/<name>/values accepte les mêmes paramètres que /api/v1/labels et renvoie les valeurs triées d’un libellé, <name> pouvant utiliser l’échappement Prometheus U__... pour les noms de libellés contenant des caractères en dehors de [a-zA-Z0-9_]. Ces endpoints couvrent ce qu’une source de données Prometheus dans Grafana utilise pour parcourir les libellés, les variables de modèle et l’autocomplétion du générateur de requêtes.Points d’entrée SQL
ClickHouse utilise le même convertisseur PromQL pour l’API HTTP, le dialectepromql ainsi que les fonctions de table prometheusQuery et prometheusQueryRange.
Exécutez directement des requêtes PromQL avec clickhouse-client :
Interroger les métadonnées des métriques
L’endpoint/prometheus/api/v1/metadata renvoie les métadonnées des métriques stockées dans la table cible Metrics de la table TimeSeries : le type, le texte d’aide et l’unité de chaque famille de métriques. Il prend en charge les paramètres Prometheus suivants dans la chaîne de requête de l’URL :
La table cible
Metrics par défaut est une ReplacingMergeTree ordonnée par nom de famille de métriques : elle conserve l’entrée de métadonnées écrite le plus récemment pour chaque famille de métriques. Plusieurs entrées par famille ne sont renvoyées que tant que la table cible les stocke — avant la fusion de ses parts, ou lorsque la table est définie avec un engine qui les conserve.
Lire les métriques via lecture distante
ClickHouse prend en charge le protocole lecture distante de Prometheus sur/prometheus/api/v1/read.
Configurez un serveur Prometheus pour lire les données de la même table TimeSeries :