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 for high-volume telemetry. Ingest with OpenTelemetry, query through PromQL, LogQL and TraceQL, and keep existing clients and dashboards while ClickHouse® handles durable storage and analytical execution.
SELECT service, count() FROM log_samples PREWHERE ts BETWEEN … GROUP BY service Signal-specific data models, word indexes, automatic metric rollup routing and SQL pushdown reduce the amount of data each query reads and returns. Stateless readers add capacity without moving durable state out of the ClickHouse database tier.
Stream selectors narrow the read while word indexes prune candidate granules before LogQL pipelines process the matching lines.
Scale readers and writers independently without moving durable state away from the ClickHouse database tier.
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.
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 an AGPLv3 digitalis.io product under active development. Source code, architecture documents, query examples and implementation issues are public.
$ git clone digitalis-io/pulsusdb
Cloning into 'pulsusdb'...
$ cd pulsusdb
$