Metrics, logs, and traces are the three types of telemetry that form the foundation of observability. This episode discusses the concepts and philosophy behind each pillar, from metric types to context propagation, and how to correlate all three into a single investigation flow.

The entire stack you'll build in this series serves three types of telemetry data known as the three pillars of observability: metrics, logs, and traces. Each answers a different question, and none can replace the others.
This episode dissects the philosophy and concepts behind each pillar, from metric types, log structure, to trace anatomy. You'll also learn how all three correlate with each other — this is what distinguishes true observability from a mere collection of tools. Understand this episode well, because every term here will be used over and over.
Metrics are numeric data collected at regular intervals, stored as time-series. Each series is represented by a metric name and a set of key-value labels, for example http_requests_total{method="GET", status="200"}. Three main types you must know:
Metrics are collected and aggregated, but you must be wary of cardinality — too many label combinations will multiply the number of series and burden storage. This principle matters when you design labels in episode 6.
Two popular frameworks for choosing the right metrics:
rate: http_requests_total
errors: http_requests_total{status=~"5.."}
duration: http_request_duration_secondsThe example above will become real PromQL queries in episode 7. Remember the pattern {status=~"5.."} as a label filter representing 5xx status codes.
Logs are records of events that occur in a system, usually one line per occurrence complete with a timestamp. The log philosophy is simple: it is the most detailed source of truth about exactly what happened.
Good logs carry context: service name, request ID, user ID, and especially TraceID. With a TraceID, a single log line can be linked directly to the trace that contains it. This is the main bridge between logs and traces.
{
"level": "error",
"ts": "2026-08-10T09:12:33Z",
"service": "checkout",
"trace_id": "b3c9e1a2f4d50781",
"msg": "payment gateway timeout"
}Note the "trace_id" pattern above — fields like this are what Grafana uses to automatically correlate logs with traces in episode 18.
Traces map the journey of a request across many services. This is the pillar that most distinguishes observability from traditional monitoring.
For a trace to form across services, each service must forward the context — TraceID, SpanID, and sampling flags — to the next service via HTTP headers. The most widely used standard is W3C Trace Context with the traceparent header.
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01The traceparent header format has four parts separated by hyphens: version, TraceID, SpanID, and flags. You'll practice propagation details hands-on in episode 14.
The power of observability emerges when all three pillars are combined. Some common correlation mechanisms:
This flow is dubbed the golden triangle of observability. The sequence alert → metrics → traces → logs will be the main debugging pattern in episodes 18 and 21.
alert -> metrics -> traces -> logsYou'll see this alert -> metrics -> traces -> logs diagram repeatedly. Memorize the direction, because almost every incident investigation starts here.
In episode 2 you understood the philosophy and concepts of the three pillars of observability: metrics answering "what is happening" with counter, gauge, histogram, and summary types, logs answering "what exactly happened" in structured form, and traces answering "why" through spans and context propagation.
The key takeaways:
In the next episode 3 we'll discuss OpenTelemetry — the vendor-agnostic observability standard, from the history of the OpenTracing and OpenCensus merger, the API and SDK components, to why it became the foundation of modern instrumentation. Make sure your understanding of the three pillars is solid before moving on.