Core concepts.
How Meridian models services, signals, and the budgets that decide when to wake you.
The four primitives
Everything in Meridian reduces to four nouns. Once you can name them, the rest of the product is just geometry on top.
A named slice of your system that maps to a single team and a single error budget. Usually one binary, sometimes a tightly-coupled set.
Logs, metrics, and traces — all stored as OTLP-native records, all queryable from one console without a join.
A target you make to your users (e.g. 99.9% of writes < 250 ms). Objectives are the only thing that should ever page you.
The slack between your objective and reality, recalculated every minute. Burns are first-class events — not a chart you have to remember to look at.
How a request flows through
A request enters Meridian as one or more OTLP records, then takes the following path before it ever shows up in a query result.
- Ingest — the agent batches OTLP frames, signs them with the workspace key, and pushes to the nearest regional endpoint.
- Routing — the control plane fans out to the right tenant shard, applying any pipeline transforms (sampling, redaction, derived metrics).
- Storage — records land in the columnar lake with a 13-month retention floor; the hot layer keeps the last 30 days uncompressed.
- Evaluation — each new record is matched against the active objectives and fires a budget event when it changes the burn rate.
Objectives, in one paragraph
An objective in Meridian is a SQL-like expression over a signal stream. It returns a stream of booleans (was this request good?) and a target percentage. The budget engine integrates the boolean stream against the target, and surfaces a single number: how much error you have left this window. Pages fire on the rate of change of that number, not its absolute value — because a budget at 30% that's draining fast is the emergency, not a budget that's been at 5% for three weeks.
The point isn't to alert when something breaks. It's to alert when something breaks enough that your users will notice before the window closes.
What we deliberately don't model
Meridian doesn't have hosts, containers, or pods as first-class entities. Those concepts exist as labels on signals — useful for querying, but not something you own or page on. If your Tuesday is spent CPU-shopping for a particular pod, you're holding the product wrong; the agent should already have rebalanced.
This is the single design decision most teams push back on in week one, and the single decision most teams thank us for in month three.
Where to go next
- OTLP pipelines — shape signals before they land.
- Retention — the storage tiers and what each costs.
- Auto-postmortems — the workflow that closes the loop after a burn.