Distributed tracing with OpenTelemetry
A trace is a tree of spans
A trace represents one request's full journey, possibly across several services. It's made of spans โ each span is one unit of work (an HTTP request, a database query, a function call) with a start time, a duration, and a parent. A span with no parent is the root span; every other span in the trace points to a parent, so the whole trace forms a tree. Looking at that tree tells you exactly where the time in a slow request went: was it the database, an external API call, or your own code?
OpenTelemetry (often shortened to OTel) is the vendor-neutral standard for producing this data โ the same instrumentation works whether you export to Jaeger, Grafana Tempo, Honeycomb, or Datadog, because OTel defines the data format and the export protocol (OTLP), not the backend.