The Platform PM

How it works

Field Guide

Observability: metrics, logs and traces

02

How it works

4 min read · Chapter 2 of 10

How telemetry becomes a fix, step by step

From telemetry to a fix. Much of the data is sampled out or dropped before it's kept, usually to control cost. An alert only helps if someone acts on it; noisy alerts get ignored, and that's where many incidents slip through.

Here's the slow job assignment from the moment the code records it to the fix. Much of the data is sampled out or dropped before it's kept, usually to control cost. And an alert only helps if someone acts on it; noisy alerts get ignored, and that's where many incidents slip through.

  1. Emitted: the scheduling service records a latency metric, a log line and a span. Spans come from an SDK the team calls in code, from auto-instrumentation that hooks into common frameworks, or from eBPF, which watches network calls from the Linux kernel without code changes. Real-user monitoring (RUM) is emitted from users' browsers and phones. What can go wrong: a proxy or message queue drops the trace header and the trace splits in two; a host with a bad clock produces negative durations.
  2. Kept: a collector on each host batches the data and adds host and Kubernetes details, then a pipeline filters, samples, redacts and routes it. Head sampling decides cheaply at the start of a trace. Tail sampling waits until the trace is complete and keeps the errors and slow ones, but it holds whole traces in memory, and OpenTelemetry's docs say it can take "dozens or even hundreds" of servers at scale. The platform indexes some data (fast to search, expensive) and stores the rest cheaply. What can go wrong: head sampling at 1% also drops 99% of error traces; scaling a tail-sampling tier can split traces silently; a collector buffer fills while the backend is slow, and data is lost during the very incident you need it for.
  3. Alerted: a rule fires on a threshold, an anomaly or an SLO (service level objective, an internal target such as 99.9% of requests succeeding over 30 days). SLO alerts fire on burn rate, how fast the error budget (the 0.1% you're allowed to fail) is being spent. What can go wrong: Google's SRE Workbook shows that a plain alert on a 0.1% error rate over ten minutes could fire up to 144 times a day while the service still meets its SLO, which trains people to ignore the pager.
  4. Investigated: someone looks, usually going from a dashboard to a trace to the logs, then to recent deploys and feature-flag changes. Google budgets about six hours of engineering per incident, postmortem included. This is the step AI SRE products target. What can go wrong: the trace that would show the cause was sampled out; the logs must be pulled back from the archive; the observability vendor itself is down.
  5. Resolved: the team mitigates (roll back, fail over, turn off a flag), fixes properly later and writes a blameless postmortem with action items. What can go wrong: the action items never close, and the incident comes back a quarter later.

Two exits sit off that path. Dropped is data sampled out or filtered because keeping it was too costly; it can't be recovered. Ignored is an alert nobody acted on, usually because the same rule had fired falsely many times. In Splunk's 2025 survey, 52% of respondents said they struggle with high volumes of false alerts.

Metrics

Question it answers
Is it healthy? How much, how fast?
What you pay for
Active series (each unique label combination), data points
High-cardinality labels
Expensive: each combination is a new series
Typical tools
Prometheus, Mimir, Datadog, CloudWatch

Logs

Question it answers
What exactly happened, here, at this time?
What you pay for
Gigabytes ingested, events indexed, days retained
High-cardinality labels
Cheap to write, expensive to index
Typical tools
Elastic, Splunk, Loki, Datadog

Traces

Question it answers
Where in the request did the time or error go?
What you pay for
Spans or gigabytes ingested and indexed
High-cardinality labels
Cheap: adding a customer ID to a span costs little
Typical tools
Jaeger, Tempo, Datadog APM, Honeycomb, X-Ray

Profiles

Question it answers
Which lines of code burn CPU or memory?
What you pay for
Profiled hosts, gigabytes
High-cardinality labels
Not applicable
Typical tools
Pyroscope, Datadog, Elastic; OpenTelemetry profiles in alpha

Real-user monitoring

Question it answers
What did real users experience?
What you pay for
Sessions, cents to a few dollars per thousand
High-cardinality labels
Session-level
Typical tools
Datadog RUM, New Relic Browser, CloudWatch RUM

The cardinality column is worth remembering. A customer ID on a metric multiplies the series by the number of customers, while on a span it adds almost nothing, so per-customer questions belong in traces.

Collecting the data

Vendor agent (Datadog Agent, Dynatrace OneAgent)

Setup effort
Lowest; finds services on its own
What you get
Deep, curated integrations
Portability
Low
Who maintains it
The vendor

OpenTelemetry SDK, called in code

Setup effort
Highest
What you get
Exactly what you code
Portability
High
Who maintains it
Your app teams

OpenTelemetry auto-instrumentation

Setup effort
Low to medium
What you get
Framework-level spans
Portability
High
Who maintains it
The community and you

eBPF, no code changes

Setup effort
Low
What you get
Network-level calls (HTTP, gRPC, SQL), little business context
Portability
Medium to high
Who maintains it
A vendor or an OpenTelemetry group; pre-1.0

Agentless cloud integration

Setup effort
Lowest
What you get
The cloud's own metrics, 2-10 minutes late
Portability
Not applicable
Who maintains it
The vendor and the cloud; API calls billed to you

A vendor's OpenTelemetry distribution (Datadog DDOT, Elastic EDOT, Splunk, Grafana Alloy)

Setup effort
Low
What you get
OpenTelemetry plus vendor extras
Portability
Configuration ports, support doesn't
Who maintains it
The vendor

Most large companies end up with a mix: in Grafana's 2026 survey, 65% of respondents were investing in both Prometheus and OpenTelemetry.