Prometheus language and API with ClickHouse® software

Keep PromQL
Change the engine

Run the metrics queries, dashboards and ad hoc analysis your team already knows while PulsusDB plans the read path across raw samples and ClickHouse® rollups

promql.queryMETRICS
PromQLsum by (service) (rate(http_requests_total[5m]))
PLAN↓index + time pruning
CLICKHOUSE SQL
SELECT service,
toStartOfInterval(ts, 60) AS bucket,
sum(value) AS samples
FROM metric_samples
PREWHERE metric_name = 'http_requests_total'
GROUP BY service, bucket
Prometheus response semanticsX-Pulsus-Explain: 1
METRICSPromQLCLICKHOUSE DATABASESTATELESS QUERY LAYER
A familiar language with a different read path

Prometheus on the outside ClickHouse database underneath

PulsusDB exposes the standard Prometheus HTTP API for metrics. It resolves series, chooses the right raw or rollup source, pushes exact work into the ClickHouse database and evaluates the remaining PromQL semantics in its own engine

01

Standard query API

Use instant and range queries, labels, series, metadata and exemplar endpoints through the Prometheus HTTP API

02

PromQL semantics

Selectors, vector matching, subqueries, aggregations and functions retain Prometheus query behaviour

03

Resolution-aware reads

Eligible range selectors use the appropriate ClickHouse rollup while the response grid still follows the requested range

04

Explain the plan

X-Pulsus-Explain reveals generated SQL, planner stages and whether raw samples or a rollup served the query

From selector to compiled plan

See the query
See the SQL

Move from a simple selector to a complex expression and inspect the representative ClickHouse SQL shape PulsusDB produces at each level

01Simple PromQL

Fetch one series set

An instant vector selector resolves matching labels to fingerprints, then reads only those series from the metric sample table

PROMQLInstant query · 5 minute lookback
up{job="api"}
PLAN STAGES
  1. 01label resolution
  2. 02time pruning
  3. 03series pruning
CLICKHOUSE SQLREPRESENTATIVE PLAN
SELECT fingerprint, unix_milli, value
FROM metric_samples
PREWHERE metric_name = 'up'
WHERE unix_milli > {eval_time - lookback}
  AND unix_milli <= {eval_time}
  AND fingerprint IN (101, 205, 990)
ORDER BY fingerprint, unix_milli
A bounded sample read for the matching instant vectorX-Pulsus-Explain: 1
SQL is shortened for readability and uses named placeholders Read the query lowering reference ↗
From expression to efficient read

Plan the query
Protect the answer

PulsusDB only pushes work into the ClickHouse database when it can preserve the language’s semantics. Everything else remains the query engine’s job

01
PARSE

Understand the expression

Build a PromQL plan from the same selectors, modifiers and operators your dashboards already send

02
PRUNE

Find the smallest read

Resolve matching series, constrain the time window and select an eligible rollup where it remains exact

03
EVALUATE

Preserve the answer

Let ClickHouse software do safe work, then evaluate the rest with Prometheus-compatible semantics

Product-neutral by default

The API surface
your tools need

Use PulsusDB’s documented API directly. Compatibility aliases remain optional, so the platform is not defined by another product’s routing conventions

See the compatibility matrix ↗
GET · POST/api/v1/queryInstant query
GET · POST/api/v1/query_rangeRange query
GET · POST/api/v1/seriesSeries discovery
One platform every signal

Keep following
the question

Move from one signal to the next without changing the observability data platform underneath