Why Observability Is More Than Dashboards
A dashboard full of green graphs is comforting right up until the moment it isn’t. Teams often equate “we have Grafana” with “we have observability,” but a dashboard is a summary — it tells you something changed, rarely why.
The three pillars, and what each one is actually for
- Metrics answer “is something wrong, and how bad is it?” — request rate, error rate, latency percentiles, saturation. They’re cheap to store and great for alerting, but they’re aggregates: a p95 latency spike doesn’t tell you which specific requests were slow, or why.
- Logs answer “what exactly happened, on this one request?” — structured, queryable events with enough context (request ID, user ID, service name) to reconstruct a single transaction.
- Traces answer “where, across a dozen services, did the time go?” — a distributed trace turns “the checkout API is slow” into “87% of that latency was a single downstream call to the inventory service.”
The pillars only become observability when they’re correlated — when a spike in a metric lets you jump straight to the traces and logs for the exact requests that caused it, without a manual grep across five services’ log files.
A minimal OpenTelemetry setup
Instrumenting a Node.js service to emit traces alongside your existing metrics is a smaller lift than most teams expect:
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({
url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,
}),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk.start();
Auto-instrumentation covers HTTP, database drivers and common frameworks out of the box — you get useful traces before writing a single manual span. Manual spans come later, once you know which specific business logic (a pricing calculation, a fraud check) is worth tracing explicitly.
Where teams get stuck
Almost never on the tooling. The friction is usually organizational: nobody owns the correlation IDs, trace context isn’t propagated across a queue boundary, or the retention window on traces is so short that by the time someone asks “what happened at 2am,” the data is already gone. Observability is a data pipeline with a retention policy, not a dashboard — treat it that way from day one and the tooling problems mostly solve themselves.
Still debugging production with dashboards alone?
Let’s talk about instrumenting traces and logs that actually answer why something broke, not just that it did.