Search retained logs through LogQL
Stream selectors narrow the read while word indexes prune candidate granules before LogQL pipelines process the matching lines.
PulsusDB is an open source observability data platform designed for fast analytical queries and extreme storage efficiency. Ingest with OpenTelemetry, query through PromQL, LogQL and TraceQL, and keep existing clients and dashboards while ClickHouse® handles compressed durable storage, object storage tiering and distributed execution.
SELECT service, count() FROM log_samples PREWHERE ts BETWEEN … GROUP BY service Signal-specific data models, column codecs, word indexes, automatic metric rollup routing and SQL pushdown reduce both the bytes stored and the data each query reads. ClickHouse storage policies tier older parts to object storage without changing the table queried.
Stream selectors narrow the read while word indexes prune candidate granules before LogQL pipelines process the matching lines.
Signal-specific schemas pair timestamps, counters and floating-point samples with Delta, DoubleDelta and Gorilla codecs, reducing the bytes stored before tiering begins.
Automatically route eligible PromQL ranges to the coarsest resolution that preserves the requested result.
Compile filters, grouping, joins and eligible aggregation into SQL, reducing traffic between the stateless and database tiers.
ClickHouse storage policies move aged data parts from local disks to S3-compatible object storage according to TTL rules. The parts remain in the same tables, so PromQL, LogQL and TraceQL continue to query retained telemetry without a separate archive path.
PulsusDB parses each expression, selects the physical read path and pushes exact filters, grouping and eligible aggregation into the ClickHouse database. Only the required result crosses back to the stateless tier.
{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 the ClickHouse database, 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
Start with one process, then scale ingestion and query independently as traffic changes. Durable telemetry, rollups and distributed execution remain in the ClickHouse database tier.
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.
Connect Prometheus-compatible clients and observability tools to the APIs they already understand while PulsusDB changes the storage and execution path underneath them. Product-neutral endpoints remain available alongside optional compatibility routes.
PULSUS_COMPAT_ENDPOINTS=true PulsusDB is a digitalis.io observability data platform under active development. Source code, architecture documents, query examples and implementation issues are public.
$ git clone digitalis-io/pulsusdb
Cloning into 'pulsusdb'...
$ cd pulsusdb
$