Skip to content

SignalDB

SignalDB is an observability database for traces, logs, metrics, and profiles. It ingests OpenTelemetry natively, serves Grafana-compatible query APIs (Tempo, Loki, Prometheus, Pyroscope), and ships its own built-in Explore UI — all from a single binary with a single data directory.

It is built to be easy to run in a homelab — one process, SQLite, local disk, bounded retention — with the option to scale out into separate services backed by PostgreSQL and S3 when you need it.

SignalDB Explore UI showing live logs from two services with level colors, a volume histogram, and a fields sidebar

Where to start

  • Send data — point an OpenTelemetry SDK or Collector at SignalDB: Sending OTLP data
  • Explore it — the built-in UI for logs, traces, and metrics: Explore UI
  • Clients retry throttling for you — the SDK, CLI, MCP server, and UI back off on 429 the same way: Client retry
  • Use Grafana — connect via the Tempo/Loki/Prometheus-compatible APIs or the native plugin: Grafana datasource
  • Run it — deployment, storage, WAL durability, retention: Operating SignalDB

The short version

flowchart LR
    OTLP[OTLP clients] --> A[Acceptor]
    A --> WAL[(WAL)]
    WAL --> W[Writer]
    W --> S[(Iceberg tables\nParquet on disk or S3)]
    G[Grafana / Explore UI] --> R[Router]
    R --> Q[Querier]
    Q --> S

In monolithic mode all of these run inside one signaldb process. In microservices mode each box is its own binary — same code, same storage format. See the architecture overview for how the pieces fit together.

Project status

SignalDB is under active development. Trace storage and the Tempo-compatible API are the most mature surface; LogQL and PromQL support cover most of each language with remaining gaps tracked on GitHub. Interfaces and storage layout may still change between releases.