<?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/pt/search-labs/author/felix-barnsteiner</link>
    </image>
    <link>https://www.elastic.co/pt/search-labs/author/felix-barnsteiner</link>
    <atom:link href="https://www.elastic.co/pt/search-labs/rss/author/felix-barnsteiner.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[pt]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 21:51:56 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Impulsionando o Elasticsearch: adicionando suporte nativo à API do Prometheus]]></title>
    <description><![CDATA[Consulte o Elasticsearch diretamente de clientes compatíveis com Prometheus via endpoints nativos de PromQL, descoberta e metadados. Envie dados para o Elasticsearch com Prometheus Remote Write.]]></description>
    <content:encoded><![CDATA[<p>Aponte qualquer cliente compatível com Prometheus para o Elasticsearch e execute PromQL diretamente em suas métricas existentes. O Elasticsearch está adicionando endpoints nativos de consulta, descoberta e metadados do Prometheus como uma prévia técnica que funcionam com métricas ingeridas via Prometheus Remote Write, OpenTelemetry ou Bulk API. A API é executada sobre os fluxos de dados de série temporal (TSDS) do Elasticsearch, então não há uma camada de armazenamento específica do Prometheus para operar.</p><p>Este post explica como os endpoints de consulta, descoberta e metadados se baseiam no trabalho anterior de ingestão e consulta para formar esse conjunto de APIs. Posts complementares aprofundam tópicos específicos:</p><ul><li><p><a href="https://www.elastic.co/observability-labs/blog/elasticsearch-supports-promql">O suporte nativo ao PromQL no ES|QL</a> abrange como as consultas PromQL são traduzidas em planos de execução do ES|QL.</p></li><li><p><a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch">Enviar métricas do Prometheus para o Elasticsearch com Remote Write</a> abrange a configuração da ingestão.</p></li><li><p><a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch-architecture">Como funciona a ingestão de gravação remota do Prometheus no Elasticsearch</a> aborda os aspectos internos da gravação remota.</p></li></ul><p>Isso ainda está em desenvolvimento. As seções abaixo destacam o que é compatível atualmente e quais partes ainda estão evoluindo.</p><h2>A superfície da API</h2><p>Hoje, a interface de API compatível com Prometheus é dividida em três grupos.</p><h3>Endpoints de consulta</h3><p>Os endpoints de consulta permitem que clientes compatíveis com Prometheus avaliem expressões PromQL:</p><ul><li><p><code>GET /_prometheus/api/v1/query_range</code> avalia uma expressão de PromQL ao longo de uma janela de tempo (resultados matriciais).</p></li><li><p><code>GET /_prometheus/api/v1/query</code> avalia em um único ponto no tempo (resultados vetoriais). Atualmente implementado como uma consulta de curto alcance que retorna a última amostra.</p></li></ul><p>Atualmente, apenas GET é suportado para endpoints de consulta. Alguns clientes usam POST por padrão, então você pode precisar configurá-los para usar GET. A convenção POST do Prometheus usa payloads <code>application/x-www-form-urlencoded</code>, que a camada HTTP do Elasticsearch rejeita como uma proteção contra CSRF antes que a solicitação chegue ao manipulador.</p><p>Para o status completo de cobertura do PromQL, consulte a <a href="https://www.elastic.co/observability-labs/blog/elasticsearch-supports-promql">postagem complementar sobre PromQL em ES|QL</a>.</p><h3>Endpoints de metadados</h3><p>Os endpoints de metadados fornecem as informações necessárias para descoberta de que os clientes precisam para autocompletar, menus suspensos de variáveis e navegação de métricas.</p><p>Os endpoints de séries, rótulos e valores de rótulos aceitam <code>match[]</code> seletores e um intervalo de tempo (<code>start</code>/<code>end</code>). O parâmetro <code>match[]</code> aceita um seletor de séries do Prometheus como <code>http_requests_total{job="api"}</code> e restringe a resposta às séries temporais correspondentes. Isso mantém as respostas rápidas e relevantes em clusters com grande número de métricas. Por exemplo:</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>O primeiro retorna todas as séries para <code>http_requests_total</code> onde <code>job="api"</code>, com seus conjuntos de rótulos completos. O segundo retorna apenas os nomes dos rótulos que existem nas séries <code>http_requests_total</code> . O terceiro retorna apenas os valores <code>instance</code> que aparecem nas séries correspondentes.</p><p><code>GET /_prometheus/api/v1/metadata</code> é diferente: ele retorna tipo e unidade para cada métrica, opcionalmente filtrada por nome via um parâmetro <code>metric</code>.</p>GET /_prometheus/api/v1/metadata?metric=http_requests_total<p>Não aceita <code>match[]</code> seletores nem um intervalo de tempo. No Prometheus, os metadados são coletados de alvos ativos de coleta (as linhas <code>HELP</code>, <code>TYPE</code> e <code>UNIT</code> que eles expõem), então a resposta não envolve uma varredura de dados. O Elasticsearch não possui um repositório de metadados dedicado como esse, então a implementação atual descobre os metadados das métricas acessando os dados de séries temporais das últimas 24 horas. Isso mantém a consulta rápida sem exigir uma varredura completa do índice. Esse período retrospectivo de 24 horas é fixo atualmente: a API de metadados do Prometheus não expõe os parâmetros <code>start</code> ou <code>end</code> que o Elasticsearch poderia usar para torná-la ajustável pelo usuário.</p><p>A <a href="https://www.elastic.co/search-labs/blog//elasticsearch-native-prometheus-api#ts-info-and-metrics-info">seguir,</a> você verá como funcionam os endpoints de metadados, inclusive os comandos <code>TS_INFO</code> e <code>METRICS_INFO</code> que os sustentam.</p><h3>Pré-filtragem de índices</h3><p>Todos os endpoints de consulta e metadados aceitam um segmento de caminho opcional <code>{index}</code> após <code>/_prometheus/</code>:</p>GET /_prometheus/metrics-prod-*/api/v1/query_range?query=up&amp;start=...&amp;end=...<p>Isso restringe quais índices do Elasticsearch a consulta executa antes de qualquer avaliação de expressão começar. Em clusters com muitos fluxos de dados distribuídos entre equipes ou ambientes, isso evita a varredura de índices não relacionados e pode reduzir significativamente a latência da consulta. Você pode configurar fontes de dados separadas por padrão de indexação para fornecer às equipes acesso segmentado às suas próprias métricas.</p><h3>Uma nota sobre a Escrita Remota</h3><p>Para ingestão, o Elasticsearch também expõe o endpoint padrão Prometheus Remote Write:</p><ul><li><p><code>POST /_prometheus/api/v1/write</code> ingere séries temporais por meio do protocolo Prometheus Remote Write v1. A versão 2 ainda não é suportada.</p></li></ul><p>O Remote Write grava nos fluxos de dados de séries temporais (TSDS) existentes do Elasticsearch, não em uma camada de armazenamento separada específica do Prometheus. Os rótulos do Prometheus se tornam dimensões do TSDS e os nomes das métricas se tornam campos no mapeamento do índice. A <a href="https://www.elastic.co/observability-labs/blog/prometheus-remote-write-elasticsearch-architecture">publicação sobre a arquitetura de gravação remota</a> aborda o mapeamento completo em detalhes, inclusive como os tipos de métricas são deduzidos e como os rótulos são armazenados com um prefixo <code>labels.</code>.</p><h3>Como funciona</h3><p>Nos bastidores, todos os endpoints funcionam da mesma forma: analisam os parâmetros HTTP de entrada, constroem um plano de execução ES|QL, executam-no contra fluxos de dados de séries temporais e convertem o resultado colunar de volta para o formato JSON que os clientes do Prometheus esperam.</p><h2>TS_INFO e METRICS_INFO</h2><p>Os endpoints de metadados precisam responder a perguntas como "quais rótulos existem?" ou "quais tipos de métricas estão definidos?" em potencialmente milhões de séries temporais, sem varrer cada ponto de dados.</p><p>Internamente, os endpoints de metadados do Prometheus respondem a essas perguntas construindo planos ES|QL em torno de dois novos comandos de processamento: <code>METRICS_INFO</code> e <code>TS_INFO</code>. Você não precisa usar esses comandos diretamente para usar a API do Prometheus, mas eles são as primitivas centrais de execução por trás das respostas dos metadados. Ambos funcionam acessando apenas um documento por série temporal para extrair seus metadados, em vez de varrer todas as amostras. Isso significa que o custo deles escala de acordo com o número de séries temporais distintas, não com o número de pontos de dados.</p><p><code>METRICS_INFO</code> retorna uma linha por métrica distinta com seu nome, tipo, unidade e campos de dimensão associados. <code>TS_INFO</code> é mais detalhado: uma linha por combinação de métrica e série temporal, incluindo os valores reais das dimensões como objeto JSON.</p><p>Um post do blog dedicado sobre <code>TS_INFO</code> e <code>METRICS_INFO</code> será publicado em breve, abordando o modelo de execução em duas fases, como eles escalam e como usá-los diretamente no ES|QL além da API do Prometheus.</p><h3>Como os endpoints de metadados usam esses recursos</h3><p>Cada endpoint de metadados constrói um plano ES|QL com um desses comandos em seu núcleo.</p><p><code>/api/v1/labels</code> e <code>/api/v1/series</code> usam <code>TS_INFO</code>, já que precisam de detalhes por série temporal (quais rótulos existem, quais valores de dimensão identificam cada série). <code>/api/v1/metadata</code> e <code>/api/v1/label/__name__/values</code> usam <code>METRICS_INFO</code>, já que precisam apenas de informações por métrica (nomes de métricas, tipos, unidades).</p><p><code>/api/v1/label/{name}/values</code> para rótulos normais (qualquer coisa diferente de <code>__name__</code>) não usa nenhum dos comandos. Rótulos regulares como <code>job</code> ou <code>instance</code> são campos de dimensão reais no índice, portanto o endpoint pode consultá-los diretamente com uma agregação group-by. Quando <code>match[]</code> seletores são fornecidos, eles são convertidos em uma cláusula <code>WHERE</code> que filtra as séries temporais antes que a agregação seja executada.</p><p>O rótulo <code>__name__</code> precisa de uma estratégia diferente porque nem sempre está presente como um campo dimensional. O Prometheus Remote Write armazena <code>labels.__name__</code>, mas métricas ingeridas por meio de outros caminhos (OpenTelemetry, a Bulk API) não possuem isso. O nome da métrica é codificado no próprio nome do campo (por exemplo, <code>metrics.http_requests_total</code>). Você poderia olhar os mapeamentos de índice para enumerar nomes de campos, mas mapeamentos, por si só, não informam qual métrica tem quais dimensões, e eles não podem ser filtrados pelos valores de rótulos de um seletor <code>match[]</code>. <code>METRICS_INFO</code> pode fazer ambos: enumera nomes de métricas entre índices enquanto respeita os filtros upstream <code>WHERE</code>.</p><p>Em todos os casos, a camada da API lida com a tradução de volta para as convenções do Prometheus: removendo os prefixos de armazenamento <code>labels.</code> e <code>metrics.</code> e gerando automaticamente <code>__name__</code> para métricas não-Prometheus que não o possuem.</p><h2>Conclusão</h2><p>O resultado: qualquer cliente compatível com o Prometheus pode consultar e explorar as métricas do Elasticsearch por meio de endpoints que ele já entende. As métricas de gravação remota, as métricas do OpenTelemetry e as métricas indexadas por outros caminhos aparecem por meio da mesma API, com suporte dos mesmos índices TSDS.</p><p>Todas as APIs do Prometheus mencionadas aqui estão disponíveis como prévia técnica no Elasticsearch Serverless hoje. Para clusters autogerenciados e implantações hospedadas no Elastic Cloud Hosted, as APIs estão disponíveis como prévia técnica no Elasticsearch 9.4, com exceção de <code>GET /_prometheus/api/v1/metadata</code>. Para experimentar localmente, use <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[Integrações]]></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>