<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Felix Barnsteiner - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Felix Barnsteiner - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/fr/search-labs/author/felix-barnsteiner</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/felix-barnsteiner</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/felix-barnsteiner.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 03:58:47 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Apporter du dynamisme à Elasticsearch : intégration de la prise en charge native de l’API Prometheus]]></title>
    <description><![CDATA[Interrogez Elasticsearch directement depuis des clients compatibles Prometheus via les points de terminaison natifs PromQL, de découverte et de métadonnées. Envoyez des données à Elasticsearch avec Prometheus Remote Write.]]></description>
    <content:encoded><![CDATA[<p>Dirigez n’importe quel client compatible avec Prometheus vers Elasticsearch et exécutez PromQL directement sur vos métriques existantes. Elasticsearch ajoute des endpoints natifs pour les requêtes, la découverte et les métadonnées Prometheus sous forme de prévisualisation technique qui fonctionnent sur des métriques ingérées via Prometheus Remote Write, OpenTelemetry ou l’API Bulk. L’API fonctionne sur les flux de données temporelles (TSDS) d’Elasticsearch, il n’y a donc pas de couche de stockage spécifique à Prometheus distincte à gérer.</p><p>Cet article explique comment les endpoints de requête, de découverte et de métadonnées s’appuient sur les travaux d’ingestion et de requête antérieurs pour former cette surface API. Les articles connexes vont plus loin sur les éléments spécifiques :</p><ul><li><p><a href="https://www.elastic.co/observability-labs/blog/elasticsearch-supports-promql">La prise en charge native de PromQL dans ES|QL</a> couvre la manière dont les requêtes PromQL sont traduites en plans d’exécution ES|QL.</p></li><li><p><a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch">Transférer des métriques Prometheus à Elasticsearch avec Remote Write</a> couvre la configuration de l’ingestion.</p></li><li><p><a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch-architecture">Comment fonctionne l'ingestion d'écriture à distance de Prometheus dans Elasticsearch</a> couvre les aspects internes de l'écriture à distance.</p></li></ul><p>Ce travail est encore en cours. Les sections ci-dessous indiquent ce qui est actuellement pris en charge et quelles parties évoluent encore.</p><h2>La surface de l'API</h2><p>Aujourd’hui, les interfaces API compatibles avec Prometheus se répartissent en trois catégories.</p><h3>Endpoints de requête</h3><p>Les endpoints de requête permettent aux clients compatibles avec Prometheus d’évaluer les expressions PromQL :</p><ul><li><p><code>GET /_prometheus/api/v1/query_range</code> évalue une expression PromQL sur une fenêtre de temps (résultats matriciels).</p></li><li><p><code>GET /_prometheus/api/v1/query</code> évalue à un instant donné (résultats vectoriels). Actuellement implémenté en tant que requête à courte portée qui renvoie le dernier échantillon.</p></li></ul><p>Seul GET est pris en charge pour les endpoints de requête actuellement. Certains clients utilisent par défaut la méthode POST. Vous devrez peut-être les configurer pour utiliser la méthode GET. La convention Prometheus POST utilise des corps <code>application/x-www-form-urlencoded</code>, que la couche HTTP d’Elasticsearch rejette comme protection CSRF avant que la requête n’atteigne le gestionnaire.</p><p>Pour connaître l’état complet de la couverture de PromQL, consultez <a href="https://www.elastic.co/observability-labs/blog/elasticsearch-supports-promql">l’article connexe sur PromQL dans ES|QL</a>.</p><h3>Points de terminaison des métadonnées</h3><p>Les endpoints de métadonnées fournissent les informations de découverte dont les clients ont besoin pour l’autocomplétion, les listes déroulantes de variables et la navigation dans les métriques.</p><p>Les endpoints des séries, des étiquettes et des valeurs d’étiquette acceptent tous les sélecteurs <code>match[]</code> et une plage de temps (<code>start</code>/<code>end</code>). Le paramètre <code>match[]</code> prend un sélecteur de série Prometheus comme <code>http_requests_total{job="api"}</code> et limite la réponse aux séries temporelles qui correspondent. Les réponses restent ainsi rapides et pertinentes sur les clusters comportant un grand nombre de métriques. Par exemple :</p>GET /_prometheus/api/v1/series?match[]=http_requests_total{job="api"}GET /_prometheus/api/v1/labels?match[]=http_requests_totalGET /_prometheus/api/v1/label/instance/values?match[]=http_requests_total{job="api"}<p>La première renvoie toutes les séries pour <code>http_requests_total</code> où <code>job="api"</code>, avec leurs ensembles d’étiquettes complets. La seconde renvoie uniquement les noms des étiquettes qui existent sur les séries <code>http_requests_total</code>. Le troisième renvoie uniquement les valeurs de <code>instance</code> qui apparaissent sur les séries correspondantes.</p><p><code>GET /_prometheus/api/v1/metadata</code> est différent : il retourne le type et l’unité pour chaque métrique, éventuellement filtrés par nom via un paramètre <code>metric</code>.</p>GET /_prometheus/api/v1/metadata?metric=http_requests_total<p>Il n’accepte pas les sélecteurs <code>match[]</code> ni aucune plage horaire. Dans Prometheus, les métadonnées sont collectées à partir de cibles de scrape actives (les lignes <code>HELP</code>, <code>TYPE</code> et <code>UNIT</code> qu’elles exposent). La réponse n’implique donc pas de scan des données. Elasticsearch ne dispose pas d’un dépôt dédié de métadonnées comme celui-ci, donc l’implémentation actuelle découvre les métadonnées des métriques en visitant les données temporelles des dernières 24 heures. Cela permet de maintenir la rapidité de la requête sans nécessiter un balayage complet de l’index. Cette analyse en 24 heures est aujourd’hui corrigée : l’API de métadonnées Prometheus ne divulgue pas les paramètres <code>start</code> ni <code>end</code> qu’Elasticsearch pourrait utiliser pour la rendre ajustable par l’utilisateur.</p><p>Le fonctionnement des endpoints des métadonnées, y compris les commandes <code>TS_INFO</code> et <code>METRICS_INFO</code> qui les alimentent, est expliqué <a href="https://www.elastic.co/search-labs/blog//elasticsearch-native-prometheus-api#ts-info-and-metrics-info">ci-dessous</a>.</p><h3>Index de pré-filtrage</h3><p>Tous les endpoints de requête et de métadonnées acceptent un segment de chemin <code>{index}</code> optionnel après <code>/_prometheus/</code> :</p>GET /_prometheus/metrics-prod-*/api/v1/query_range?query=up&amp;start=...&amp;end=...<p>Il limite les index Elasticsearch sur lesquels la requête est en exécution avant le début de toute évaluation d’expression. Sur les clusters comportant de nombreux flux de données entre équipes ou environnements, cela évite de scanner des index non pertinents et peut réduire de manière significative la latence des requêtes. Vous pouvez configurer des sources de données distinctes par modèle d’indexation afin de fournir aux équipes un accès limité à leurs propres métriques.</p><h3>Remarque sur Remote Write</h3><p>Pour l’ingestion, Elasticsearch expose également l’endpoint standard Prometheus Remote Write :</p><ul><li><p><code>POST /_prometheus/api/v1/write</code> ingère des séries temporelles via le protocole Prometheus Remote Write v1. v2 n’est pas encore pris en charge.</p></li></ul><p>Remote Write écrit dans les flux de données temporelles existants d’Elasticsearch (TSDS), et non dans une couche de stockage spécifique à Prometheus. Les étiquettes Prometheus deviennent des dimensions TSDS, et les noms des métriques deviennent des champs dans le mapping des index. <a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch-architecture">L’article sur l’architecture de l’écriture à distance</a> couvre le mapping complet en détail, notamment comment les types de métriques sont déduits et comment les étiquettes sont stockées avec un préfixe <code>labels.</code>.</p><h3>Fonctionnement</h3><p>En interne, tous les endpoints fonctionnent de la même manière : ils analysent les paramètres HTTP entrants, construisent un plan de requête ES|QL, l’exécutent sur des flux de données temporelles et convertissent le résultat en colonnes au format JSON attendu par les clients Prometheus.</p><h2>TS_INFO et METRICS_INFO</h2><p>Les endpoints des métadonnées doivent répondre à des questions telles que « quelles étiquettes existent ? » ou « quels types de métriques sont définis ? » sur des millions de séries temporelles, sans analyser chaque point de données.</p><p>En interne, les endpoints de métadonnées Prometheus répondent à ces questions en construisant des plans ES|QL autour de deux nouvelles commandes de traitement : <code>METRICS_INFO</code> et <code>TS_INFO</code>. Vous n’avez pas besoin d’utiliser ces commandes directement pour utiliser l’API Prometheus, mais elles constituent les primitives d’exécution fondamentales qui sous-tendent les réponses aux métadonnées. Toutes deux fonctionnent en ne visitant qu’un seul document par série temporelle pour extraire ses métadonnées, plutôt que de parcourir tous les échantillons. Cela signifie que leur coût évolue avec le nombre de séries temporelles distinctes, et non en fonction du nombre de points de données.</p><p><code>METRICS_INFO</code> renvoie une ligne par métrique distincte avec son nom, son type, son unité et ses champs de dimension associés. <code>TS_INFO</code> est plus granulaire : une ligne par combinaison (métrique, série temporelle), incluant les valeurs réelles des dimensions en tant qu'objet JSON.</p><p>Un article de blog dédié à <code>TS_INFO</code> et <code>METRICS_INFO</code> sera bientôt publié, abordant le modèle d’exécution en deux phases, la façon dont ils s’adaptent et la façon de les utiliser directement dans les requêtes ES|QL au-delà de l’API Prometheus.</p><h3>Comment les points de terminaison des métadonnées les utilisent</h3><p>Chaque endpoint des métadonnées construit un plan ES|QL avec l’une de ces commandes à son noyau.</p><p><code>/api/v1/labels</code> et <code>/api/v1/series</code> utilisent <code>TS_INFO</code>, car ils ont besoin de détails par série temporelle (quelles étiquettes existent, quelles valeurs de dimension identifient chaque série). <code>/api/v1/metadata</code> et <code>/api/v1/label/__name__/values</code> utilisent <code>METRICS_INFO</code>, car ils n’ont besoin que d’informations métriques (noms, types et unités métriques).</p><p><code>/api/v1/label/{name}/values</code> pour les étiquettes ordinaires (autres que <code>__name__</code>), n’utilisez aucune des deux commandes. Les étiquettes régulières comme <code>job</code> ou <code>instance</code> sont de véritables champs de dimensions dans l’index, de sorte que l’endpoint peut les interroger directement avec une agrégation group-by. Lorsque des sélecteurs <code>match[]</code> sont fournis, ils sont traduits en une clause <code>WHERE</code> qui filtre la série temporelle avant l’exécution de l’agrégation.</p><p>Le label <code>__name__</code> nécessite une stratégie différente car il n’est pas toujours présent sous forme de champ de dimension. Prometheus Remote Write stocke <code>labels.__name__</code>, mais les mesures ingérées par d’autres voies (OpenTelemetry, l’API Bulk) ne les contiennent pas. Le nom de la métrique est encodé dans le nom même du champ (par exemple, <code>metrics.http_requests_total</code>). Vous pourriez consulter les correspondances d’index pour énumérer les noms des champs, mais les correspondances seules ne vous indiquent pas quelle métrique a quelles dimensions, et elles ne peuvent pas être filtrées par les valeurs d’étiquettes d’un sélecteur <code>match[]</code>. <code>METRICS_INFO</code> peut faire les deux : il énumère les noms des métriques dans les index tout en respectant les filtres <code>WHERE</code> en amont.</p><p>Dans tous les cas, la couche API gère la conversion vers les conventions Prometheus : elle supprime les préfixes de stockage <code>labels.</code> et <code>metrics.</code>, et synthétise <code>__name__</code> pour les métriques non-Prometheus qui en sont dépourvues.</p><h2>Conclusion</h2><p>Résultat : tout client compatible avec Prometheus peut interroger et explorer les métriques Elasticsearch par le biais d’endpoints qu’il comprend déjà. Les mesures d’écriture à distance, les mesures OpenTelemetry et les mesures indexées par d’autres chemins sont toutes affichées avec la même API et les mêmes index TSDS.</p><p>Toutes les API Prometheus mentionnées ici sont désormais disponibles en préversion technique dans Elasticsearch Serverless. Pour les clusters autogérés et les déploiements hébergés par Elastic Cloud Hosted, disponibles en préversion technique dans Elasticsearch 9.4, à l’exception de <code>GET /_prometheus/api/v1/metadata</code>. Pour expérimenter localement, utilisez <a href="https://www.elastic.co/docs/deploy-manage/deploy/self-managed/local-development-installation-quickstart">start-local</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-native-prometheus-api</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-native-prometheus-api</guid>
    <category><![CDATA[Intégrations]]></category>
    <dc:creator><![CDATA[Felix Barnsteiner]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt12b4e100d5bbb7f0/6a16f7a22b835ff747f4afdd/c7b333bd73e8a1f4e18486b2d692ba742788dcfd-1376x768.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>