Performance
Back to all articles
observability

Why Observability Is More Than Dashboards

Performance360 Engineering2 min read

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.