Read-path first
Schema and planner decisions begin with the dashboard, search and drilldown queries they must serve.
Ingest with OpenTelemetry. Query with PromQL, LogQL and TraceQL. Let PulsusDB turn them into ClickHouse-native SQL.
SELECT service, count() FROM log_samples PREWHERE ts BETWEEN … GROUP BY service Logs, metrics, traces and profiles behave differently. PulsusDB gives each signal a purpose-built ClickHouse schema, ordering strategy and read path—then presents the 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. Use text indexes to avoid brute-force scans.
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.
PulsusDB’s product-neutral APIs are always on. Enable compatibility endpoints when you want existing datasources and dashboards to connect without changing their language.
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
$