﻿---
title: PromQL limitations
description: Execution and HTTP constraints for PromQL in Elasticsearch, including unsupported constructs and instant-query behavior.
url: https://www.elastic.co/elastic/docs-builder/docs/2927/reference/query-languages/promql/promql-limitations
products:
  - Elasticsearch
applies_to:
  - Elastic Cloud Serverless: Preview
  - Elastic Stack: Preview since 9.4
---

# PromQL limitations
PromQL reads metrics stored in [time series data streams](https://docs-v3-preview.elastic.dev/elastic/docs-builder/docs/2927/manage-data/data-store/data-streams/time-series-data-stream-tsds) (TSDS).
The following constraints apply to execution in Elasticsearch, including the [Prometheus-compatible HTTP API](https://www.elastic.co/elastic/docs-builder/docs/2927/reference/query-languages/promql/promql-http-api) and the ES|QL [`PROMQL`](https://www.elastic.co/elastic/docs-builder/docs/2927/reference/query-languages/esql/commands/promql) source command, unless stated otherwise.
They describe behavioral differences and unsupported areas compared with upstream Prometheus.
<warning>
  This functionality is in technical preview and might be changed or removed in a future release.
  Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.
</warning>


## GET requests only (HTTP API)

Only `GET` is supported on `/_prometheus/` routes in this preview.
`POST` with `application/x-www-form-urlencoded` bodies is rejected as a CSRF safeguard.
If your Prometheus-compatible client defaults to `POST` for queries, configure it to use `GET` instead.

## Unsupported Prometheus query parameters (HTTP API)

The [PromQL HTTP API](https://www.elastic.co/elastic/docs-builder/docs/2927/reference/query-languages/promql/promql-http-api) documents only the parameters each route accepts. Extra parameters from the [Prometheus HTTP API](https://prometheus.io/docs/prometheus/latest/querying/api/) are not supported yet. Elasticsearch does not ignore them: the request fails with 400 Bad Request. Configure clients and integrations to omit them (for example, there is no per-request `timeout` query parameter). Cancellation and runtime limits follow ES|QL and cluster settings.

## Instant query is an approximation

For now, `/api/v1/query` is implemented as a five-minute range query ending at `time`, returning the last sample per series.
Optional `lookback_delta` from the Prometheus API is not supported yet on this route. See [Unsupported Prometheus query parameters](#promql-limitations-unsupported-query-params) and the [`query` endpoint](/elastic/docs-builder/docs/2927/reference/query-languages/promql/promql-http-api#promql-http-api-query-instant) documentation.

## Staleness markers

When a scrape target disappears, Prometheus ingests staleness markers.
Instant vector selectors then omit those series from instant-vector results, so metrics that stopped reporting do not appear as still current.
Elasticsearch does not apply Prometheus staleness markers yet.
For now, a series stops appearing in results only once all its samples fall outside the evaluation window, rather than disappearing as soon as data stops arriving.

## Unsupported PromQL constructs

The majority of PromQL expressions run unchanged.
The following constructs are not evaluated yet, so they return a client error (4xx):
- Binary set operators: `and`, `or`, `unless`
- Group modifiers: `on(...)`, `group_left`, `group_right`
- Functions: `histogram_quantile`, `predict_linear`, `label_join`


## Metric metadata `help` (HTTP API)

On [`/api/v1/metadata`](/elastic/docs-builder/docs/2927/reference/query-languages/promql/promql-http-api#promql-http-api-metadata-endpoint), each metric includes a `help` string shaped like Prometheus `HELP` lines.
In this preview the `help` field is always an empty string. Help text from metric definitions is not surfaced yet.

## Exemplar queries (HTTP API)

`/api/v1/query_exemplars` is not implemented yet.
Turn off exemplar queries in your Prometheus-compatible client for now (for example, the Grafana data source exemplars option) so it does not call that endpoint.