Metricix

Real-Time Telemetry, Reimagined.

A self-hosted, non-blocking telemetry ingestion and analytics engine. Ingest millions of events with sub-15ms latency, buffer in Redis, and persist to PostgreSQL — all without a single blocked thread.

Try the live demo

Launch Emitter View Dashboard
< 15ms
P95 Latency
1,000+
Req/sec (1 vCPU)
0%
Data Loss
202
Instant Response

Engineered for Scale

Non-Blocking I/O

Built on Spring WebFlux and Project Reactor. The entire ingestion path is fully asynchronous — zero JVM thread blocking on the hot path for both reads and writes.

Redis Event Buffer

Events are atomically queued via RPUSH and drained in bulk by a background sweeper. The API returns 202 Accepted before any database interaction occurs.

Bulk PostgreSQL Writes

A single INSERT ... VALUES per batch cycle via R2DBC — not N individual inserts. Schema managed automatically by Flyway on startup.

Dead Letter Queue

Failed database batches are never dropped. They are preserved in a Redis DLQ for inspection and replay. Zero silent data loss, ever.

Per-Key Rate Limiting

Token bucket algorithm backed by Redis. Works correctly across multiple instances with symmetric API key authentication and mtx_pub_ prefix enforcement.

Prometheus Metrics

Custom ingestion counters and batch size histograms exposed at /actuator/prometheus. Structured JSON logging compatible with Datadog, ELK, and Grafana Loki.

How It Works

1
Ingest
Client sends a POST to /api/v1/track with an API key. The payload is validated and decorated with a timestamp and client IP.
2
Buffer
The event is atomically pushed to a Redis list. The API immediately returns 202 Accepted — no database wait.
3
Flush
A background sweeper atomically renames the queue every 5 seconds and drains the batch for bulk insertion.
4
Persist
The entire batch is written to PostgreSQL in a single bulk INSERT via R2DBC. Failures go to the Dead Letter Queue.