Tooling

Observability: metrics, traces, dashboards

You can't fix what you can't see. The three pillars of inference observability, and the metrics that actually matter.

Benchmarking was the art of measuring a system under controlled load. Observability is its sibling: the art of measuring a system in production, under real traffic, without breaking it.

Here's the uncomfortable truth I've learned: most inference outages aren't caused by model quality. They're caused by not seeing the problem until users do. Observability is the discipline of seeing problems before users do.

The three pillars

Observability has three pillars, and they answer three different questions:

You need all three. Metrics tell you the system is sick, logs tell you what the patient said, traces tell you which organ failed.

The metrics that matter for inference

Not all metrics are created equal. Here's the ones I actually watch, and why:

Mental model

Metrics are the dashboard of a car. Logs are the mechanic's notes. Traces are the black box. You wouldn't drive without a dashboard, and you shouldn't serve without one.

The stack

In practice, the modern inference observability stack looks like this:

The key insight: instrument at every layer. Client, gateway, engine, GPU. A request that's slow could be slow anywhere, and if you only measure the engine, you'll blame the engine for a network problem.

The one metric to rule them all

If I had to pick one metric to watch, it's queue depth. Here's why: everything else is a lagging indicator. TTFT is already bad by the time you see it. Queue depth is the thing that predicts TTFT will be bad.

When queue depth grows, you have seconds to react before users feel it. That's the metric your autoscaler should watch, and the one your on-call should have pinned.

The takeaway

You can't fix what you can't see. And you can't see what you didn't instrument.

Tomorrow: the client code that talks to all of this, streaming and async.