Observability should be cheap and easy.
Plural Telemetry is a Rust reimplementation of Prometheus, Loki and Tempo, built directly on object storage with SlateDB. You run two kinds of pods instead of ten, keep your Grafana dashboards, and the only stateful dependency is a bucket.
Apache 2.0 · Kubernetes 1.28+ · sponsored byPlural
What's inside
Plural Telemetry is three databases that share one storage engine, one sharding protocol, and one Kubernetes operator. Each one speaks the wire protocols and query language of the system it replaces, so agents, dashboards and alerts keep working when you switch.
Prometheus-compatible TSDB with remote write and OTLP.
Read the docsLoki-compatible log store with LogQL, OTLP and _bulk ingest.
Read the docsTempo-compatible trace store with TraceQL and OTLP.
Read the docsBuilt on SlateDB
SlateDB is an embedded LSM-tree key/value engine that writes its WAL and SSTs straight to object storage. It gives each Plural Telemetry database:
- Zero-disk durability. Data is durable once it lands in S3, GCS or Azure Blob. Local NVMe is a disposable cache, not a replica.
- Single writer, many readers. A fenced manifest guarantees one writer per database. Readers open the same data read-only and scale independently.
- Tunable cost and latency. Batched WAL uploads trade per-request API cost against durability latency. Writes can acknowledge as
applied,writtenordurable. - Background compaction. Sorted runs are merged off the hot path, so readers see a small number of large, cacheable objects.
SlateDB is single-writer by design. Plural Telemetry adds the missing piece for observability workloads, which is many writers: epoch-based sharding routes every record to one of up to 4,096 storage shards, and each shard is its own SlateDB database.
By the numbers
Differential fuzzing runs every product against its peer on the same data and queries. These figures come from the published runs. Methodology and per-run history are on each database's Benchmarks page.
Productionization
On top of SlateDB, Plural Telemetry adds what a real observability backend needs:
- Sharding. Multiple writers, coordinated by Kubernetes
Leaseobjects and aShardMapcustom resource. No etcd, ZooKeeper or memberlist to run. - Multi-tenancy. Every route is namespaced (
/read/ns/{namespace}/…), and tenant isolation is encoded in storage keys. - Authentication. Basic auth per namespace through
NamespaceAuthenticationresources, or JWKS-verified RS256 JWTs. - Oracle testing. Each database is continuously diffed against Prometheus, Mimir, Loki or Tempo on the same inputs.
Start with the installation overview, read the manifesto for the why, or jump straight into a database with the switcher in the top left.