Read-path first
Schema and planner decisions begin with the dashboard, search and drilldown queries they must serve.
One open source platform for logs, metrics, traces and profiles. Ingest with OpenTelemetry, keep PromQL, LogQL and TraceQL, and let PulsusDB turn them into ClickHouse-native SQL.
SELECT service, count() FROM log_samples PREWHERE ts BETWEEN … GROUP BY service PulsusDB brings logs, metrics, traces and profiles into one observability platform without pretending they behave the same. Each signal gets a purpose-built ClickHouse schema, ordering strategy and read path—behind APIs your tools already understand.
Read the architecture ↗Schema and planner decisions begin with the dashboard, search and drilldown queries they must serve.
Resolve labels without broadcasting every lookup across every shard.
Use time filters, ClickHouse indexes and rollups where the query can stay exact.
X-Pulsus-Explain: 1 exposes generated SQL, routing and planner stages when you need to know what the query actually did.
Write the queries your team already knows. PulsusDB parses, plans and compiles them for ClickHouse.
{service_name="checkout"} |= "timeout" Resolve labels first. Word indexes prune indexable terms; substring-only filters scan the selected streams.
SELECT ts, labels, body
FROM log_samples
PREWHERE ts BETWEEN $start AND $end
AND fingerprint IN (…)
WHERE body LIKE '%timeout%'
ORDER BY ts DESC LIMIT 100
sum by (service) (rate(http_requests_total[5m])) Keep the Prometheus API. Push safe work into ClickHouse, evaluate the rest faithfully.
SELECT service, toStartOfInterval(ts, 60)
AS bucket, sum(value) AS samples
FROM metric_samples
PREWHERE metric_name = $metric
AND ts BETWEEN $start AND $end
GROUP BY service, bucket
{ resource.service.name = "api" && duration > 1s } Search traces by the attributes engineers actually use, not only by trace ID.
SELECT trace_id, min(start_ts), max(end_ts)
FROM trace_spans
PREWHERE service = $service
AND start_ts BETWEEN $start AND $end
WHERE duration_ns > 1000000000
GROUP BY trace_id ORDER BY min(start_ts) DESC
Run everything in one process, or scale ingestion and query independently. Every durable byte remains in ClickHouse.
Start small with all mode and a single ClickHouse node.
Split writer and reader modes as the workload grows.
Restart and load-balance PulsusDB freely; caches are rebuildable.
Keep the observability workflows your teams already know. PulsusDB’s product-neutral APIs are always on, with compatibility endpoints for existing datasources and dashboards.
PULSUS_COMPAT_ENDPOINTS=true PulsusDB is an AGPLv3 Digitalis product under active development. The architecture, compatibility work and implementation decisions are documented in public.
$ git clone digitalis-io/pulsusdb
Cloning into 'pulsusdb'...
$ cd pulsusdb
$