Three pillars: logs, metrics and traces
coreintermediateLogs, metrics and traces are three different shapes of data about the same running system, and each answers a question the other two cannot answer well. A log is a discrete, timestamped record of one event — rich in detail about exactly what happened, but expensive to store and slow to query across a whole fleet at scale. A metric is a numeric measurement aggregated over time (a count, a rate, a gauge, a histogram bucket) — cheap to store and fast to query, but it tells you something is wrong without telling you which request or which user was affected. A trace follows one request as it moves across multiple services, recording how long each hop took and how the hops relate to each other — it answers "where did this specific request spend its time" in a way neither logs nor metrics alone can. None of the three replaces the other two; a mature observability setup carries all three and correlates them together.
Think of it as
Think of a hospital: metrics are the vital-signs monitor at the nurses' station showing heart rate and blood pressure trends for every patient at a glance — great for spotting that something is wrong right now, useless for explaining why. Logs are the detailed nurse's notes on one patient's chart — rich and specific, but you would not want to read every patient's full chart just to find who is in trouble. A trace is the patient's full visit itinerary — check-in, triage, X-ray, lab work, doctor consult — showing how long each stop took and in what order, which is exactly what you need when one patient's visit took six hours and you want to know which single stop caused the delay.
What we're doing: Use all three pillars together to diagnose one slow checkout request.
- 3
- The metric told us something was wrong; it could not tell us which request or which service to look at next.
- 8
- The trace narrows the problem from "checkout is slow" to "one specific downstream span is slow" without reading a single log line.
- 13
- Only the log line has the actual error text — the trace shows where the time went, not why.
Why this works: This is the intended division of labor: a metric detects the anomaly at a glance, a trace localizes it to a specific service and span, and a log explains the specific cause at that span — skipping any one of the three would have left a real gap in this diagnosis.
Trying to diagnose a specific request using only dashboards
Wrong
Better
What you see: The on-call engineer spends 30+ minutes trying to manually reproduce a transient issue that already happened and is sitting recorded in the tracing and logging backends, because the dashboard alone gives no way to identify which specific request or dependency was actually responsible.
Why: A metrics dashboard has no concept of an individual request — it is already an aggregate. Without pivoting to traces and logs for actual affected request IDs, the engineer is reduced to guessing and reproducing blind, when the real evidence already exists and only needs to be looked up.
- Metric dashboard — p99 latency spikes — something is wrong
- leads to Trace for a slow request (pivot via request/trace ID)
- Trace for a slow request — which service and span ate the time
- leads to Logs for that span (pivot to the slow span's logs)
- Logs for that span — exact error message and context
What each pillar is actually good and bad at
Remember: Metrics detect that something is wrong system-wide and are cheap to watch continuously; traces localize the problem to a specific service and span for one request; logs explain the specific cause once localized. The three are complementary — a request/trace ID is the thread that lets you pivot from one pillar to the next during a real investigation.

