<?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/es/search-labs/author/felix-barnsteiner</link>
    </image>
    <link>https://www.elastic.co/es/search-labs/author/felix-barnsteiner</link>
    <atom:link href="https://www.elastic.co/es/search-labs/rss/author/felix-barnsteiner.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[es]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 08:09:45 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Potenciando Elasticsearch: agregamos soporte nativo de la API de Prometheus]]></title>
    <description><![CDATA[Realiza una búsqueda en Elasticsearch directamente desde clientes compatibles con Prometheus a través de endpoints nativos de PromQL, descubrimiento y metadatos. Envía datos a Elasticsearch con Prometheus Remote Write.]]></description>
    <content:encoded><![CDATA[<p>Conecta cualquier cliente compatible con Prometheus a Elasticsearch y ejecuta PromQL directamente sobre tus métricas existentes. Elasticsearch está agregando endpoints de búsqueda, descubrimiento y metadatos nativos de Prometheus como una vista previa tecnológica que funciona sobre métricas ingeridas a través de Prometheus Remote Write, OpenTelemetry o la API de bulk. La API se ejecuta sobre los flujos de datos temporales (TSDS) de Elasticsearch, por lo que no hay una capa de almacenamiento específica de Prometheus para operar.</p><p>Esta publicación explica cómo los endpoints de búsqueda, descubrimiento y metadatos se basan en el trabajo anterior de ingesta y búsqueda para formar esa superficie de API. Las publicaciones complementarias profundizan en las piezas individuales:</p><ul><li><p><a href="https://www.elastic.co/observability-labs/blog/elasticsearch-supports-promql">La compatibilidad nativa con PromQL en ES|QL</a> explica cómo se traducen las consultas PromQL en planes de ejecución de ES|QL.</p></li><li><p><a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch">Envía métricas de Prometheus a Elasticsearch con Remote Write</a> cubre la configuración de ingesta.</p></li><li><p><a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch-architecture">El artículo “Cómo funciona la ingesta de escritura remota de Prometheus en Elasticsearch”</a> explica los detalles internos de la escritura remota.</p></li></ul><p>Esto aún está en desarrollo. En las secciones siguientes se indica qué es lo que ya está disponible y qué partes aún están en desarrollo.</p><h2>La superficie de la API</h2><p>Hoy en día, la interfaz de programación de aplicaciones (API) compatible con Prometheus se divide en tres grupos.</p><h3>Endpoints de consulta</h3><p>Los endpoints de consulta permiten a los clientes compatibles con Prometheus evaluar expresiones PromQL:</p><ul><li><p><code>GET /_prometheus/api/v1/query_range</code> evalúa una expresión PromQL en un intervalo de tiempo (resultados en forma de matriz).</p></li><li><p><code>GET /_prometheus/api/v1/query</code> evalúa en un solo punto en el tiempo (resultados vectoriales). Actualmente implementado como una búsqueda de alcance corto que devuelve la última muestra.</p></li></ul><p>Hoy en día, solo GET es compatible con los puntos de consulta. Algunos clientes usan POST de forma predeterminada, así que es posible que tengas que configurarlos para que usen GET. La convención POST de Prometheus emplea <code>application/x-www-form-urlencoded</code> cuerpos, que la capa HTTP de Elasticsearch rechaza como salvaguarda CSRF antes de que la solicitud llegue al controlador.</p><p>Para ver el estado completo de la cobertura de PromQL, consulta la <a href="https://www.elastic.co/observability-labs/blog/elasticsearch-supports-promql">publicación complementaria sobre PromQL en ES|QL</a>.</p><h3>Endpoints de metadatos</h3><p>Los endpoints de metadatos proporcionan la información de descubrimiento que los clientes necesitan para el autocompletado, los desplegables de variables y la navegación de métricas.</p><p>La serie, las etiquetas y los puntos finales de valores de etiqueta aceptan selectores <code>match[]</code> y un rango de tiempo (<code>start</code>/<code>end</code>). El parámetro <code>match[]</code> toma un selector de serie de Prometheus como <code>http_requests_total{job="api"}</code> y restringe la respuesta a series temporales que coinciden. Esto garantiza que las respuestas sean rápidas y pertinentes en clústeres con una gran cantidad de métricas. Por ejemplo:</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 primera devuelve todas las series para <code>http_requests_total</code> donde <code>job="api"</code>, con sus conjuntos de etiquetas completos. La segunda devuelve solo los nombres de las etiquetas que existen en las series de <code>http_requests_total</code>. El tercero solo devuelve los valores de <code>instance</code> que aparecen en las series coincidentes.</p><p><code>GET /_prometheus/api/v1/metadata</code> es diferente: devuelve el tipo y la unidad para cada métrica, opcionalmente filtrados por nombre mediante un parámetro <code>metric</code>.</p>GET /_prometheus/api/v1/metadata?metric=http_requests_total<p>No acepta <code>match[]</code> selectores ni un intervalo de tiempo. En Prometheus, los metadatos se recogen de objetivos activos de extracción (las líneas <code>HELP</code>, <code>TYPE</code> y <code>UNIT</code> que exponen), por lo que la respuesta no implica un escaneo de datos. Elasticsearch no tiene un almacén de metadatos dedicado como ese, por lo que la implementación actual descubre metadatos de métricas visitando datos temporales de las últimas 24 horas. Esto mantiene la consulta rápida sin requerir un escaneo completo del índice. Ese retroceso de 24 horas está corregido hoy: la API de metadatos de Prometheus no expone los parámetros <code>start</code> o <code>end</code> que Elasticsearch podría usar para que sean ajustables por el usuario.</p><p>Cómo funcionan los endpoints de metadatos de forma interna, incluidos los comandos <code>TS_INFO</code> y <code>METRICS_INFO</code> que los potencian, se explica <a href="https://www.elastic.co/search-labs/blog//elasticsearch-native-prometheus-api#ts-info-and-metrics-info">a continuación</a>.</p><h3>Pre-filtrado de índices</h3><p>Todos los endpoints de consulta y metadato aceptan un segmento de ruta <code>{index}</code> opcional después de <code>/_prometheus/</code>:</p>GET /_prometheus/metrics-prod-*/api/v1/query_range?query=up&amp;start=...&amp;end=...<p>Esto limita los índices de Elasticsearch contra los que se ejecuta la consulta antes de que comience la evaluación de cualquier expresión. En clústeres con muchos flujos de datos entre equipos o entornos, esto evita escanear índices no relacionados y puede reducir en gran medida la latencia de las consultas. Puedes configurar fuentes de datos independientes por patrón de índice para dar a los equipos acceso limitado a sus propias métricas.</p><h3>Una nota sobre Remote Write</h3><p>Para la ingesta, Elasticsearch también expone el endpoint estándar de escritura remota de Prometheus:</p><ul><li><p><code>POST /_prometheus/api/v1/write</code> ingiere series temporales a través del protocolo Prometheus Remote Write v1. v2 aún no es compatible.</p></li></ul><p>La escritura remota escribe en los flujos de datos temporales existentes (TSDS) de Elasticsearch, no en una capa de almacenamiento específica de Prometheus separada. Las etiquetas de Prometheus se convierten en dimensiones de TSDS, y los nombres de las métricas se convierten en campos en el mapeo del índice. La <a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch-architecture">publicación de arquitectura de escritura remota</a> abarca todo el mapeo en detalle, incluso explica cómo se infieren los tipos de métricas y cómo se almacenan las etiquetas con un prefijo <code>labels.</code>.</p><h3>Cómo funciona</h3><p>Detrás de escena, todos los endpoints funcionan de la misma manera: parsean los parámetros HTTP entrantes, construyen un plan de consulta ES|QL, lo ejecutan contra los flujos de datos de series temporales y convierten el resultado columnar de vuelta al formato JSON que esperan los clientes de Prometheus.</p><h2>TS_INFO y METRICS_INFO</h2><p>Los endpoints de metadatos deben responder preguntas como "¿qué etiquetas existen?" o "¿qué tipos de métricas están definidos?" a través de lo que podrían ser millones de series temporales, sin tener que analizar cada punto de datos.</p><p>A nivel interno, los endpoints de metadatos de Prometheus responden a esas preguntas construyendo planes de ES|QL basados en dos nuevos comandos de procesamiento: <code>METRICS_INFO</code> y <code>TS_INFO</code>. No es necesario usar estos comandos directamente para usar la API de Prometheus, pero son las primitivas de ejecución del núcleo detrás de las respuestas de metadatos. Ambos funcionan visitando solo un documento por serie temporal para extraer su metadato, en vez de escanear todas las muestras. Esto significa que su costo varía en función de la cantidad de series temporales distintas, no de la cantidad de puntos de datos.</p><p><code>METRICS_INFO</code> devuelve una fila por cada métrica distinta, con su nombre, tipo, unidad y los campos de dimensión asociados. <code>TS_INFO</code> es más granular: una fila por combinación (métrica, serie temporal), incluyendo los valores de dimensión reales como un objeto JSON.</p><p>Muy pronto llegará una publicación de blog especial sobre <code>TS_INFO</code> y <code>METRICS_INFO</code> que cubrirá el modelo de ejecución en dos fases, cómo escalan y cómo usarlos directamente en consultas de ES|QL por fuera de la API de Prometheus.</p><h3>Cómo los endpoints de metadatos los emplean</h3><p>Cada endpoint de metadatos construye un ES|QL plan con uno de estos comandos como núcleo.</p><p><code>/api/v1/labels</code> y <code>/api/v1/series</code> usan <code>TS_INFO</code>, ya que necesitan detalles por serie temporal (qué etiquetas existen, qué valores de dimensión identifican cada serie). <code>/api/v1/metadata</code> y <code>/api/v1/label/__name__/values</code> usan <code>METRICS_INFO</code>, ya que solo necesitan información por métrica (nombres de métricas, tipos, unidades).</p><p><code>/api/v1/label/{name}/values</code> para etiquetas normales (cualquier otra cosa que no sea <code>__name__</code>), no se usa ninguno de los dos comandos. Algunas etiquetas regulares como <code>job</code> o <code>instance</code> son campos dimensionales reales en el índice, por lo que el endpoint puede consultarlos directamente mediante una agregación según grupo. Cuando se proporcionan selectores <code>match[]</code>, se traducen en una cláusula <code>WHERE</code> que filtra la serie temporal antes de que se ejecute la agregación.</p><p>La etiqueta <code>__name__</code> necesita una estrategia diferente porque no siempre está presente como un campo dimensional. Prometheus Remote Write sí almacena <code>labels.__name__</code>, pero las métricas ingeridas por otros caminos (OpenTelemetry, la API de bulk) no la tienen. El nombre de la métrica está codificado en el propio nombre del campo (por ejemplo, <code>metrics.http_requests_total</code>). Podrías consultar las asignaciones de índices para enumerar los nombres de los campos, pero las asignaciones por sí solas no te dicen qué métrica tiene qué dimensiones, y no se pueden filtrar por valores de etiquetas de un selector <code>match[]</code>. <code>METRICS_INFO</code> puede hacer ambas cosas: enumera los nombres de las métricas en los índices mientras respeta los filtros <code>WHERE</code> upstream.</p><p>En todos los casos, la capa API gestiona la traducción de vuelta a las convenciones de Prometheus: eliminando los prefijos de almacenamiento <code>labels.</code> y <code>metrics.</code> y sintetizando <code>__name__</code> para métricas no Prometheus que carecen de ellas.</p><h2>En conclusión</h2><p>El resultado: cualquier cliente compatible con Prometheus puede buscar y explorar métricas de Elasticsearch a través de endpoints que ya entiende. Las métricas de Remote Write así como las de OpenTelemetry y las métricas indexadas a través de otras rutas aparecen todas a través de la misma API, respaldadas por los mismos índices TSDS.</p><p>Todas las API de Prometheus que se mencionan aquí ya están disponibles como versión preliminar técnica en Elasticsearch Serverless. Para clústeres autogestionados y despliegues alojados de Elastic Cloud Hosted, disponibles como vista previa técnica en Elasticsearch 9.4, con la excepción de <code>GET /_prometheus/api/v1/metadata</code>. Para probarlo a nivel local, usa <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[Integraciones]]></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>