<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi" -->

---
title: OpenTelemetry series: Understanding OTel traces and spans
description: OpenTelemetry traces and spans are foundational concepts for understanding how requests flow through distributed systems. A trace represents the complete...
canonical: https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: OpenTelemetry series: Understanding OTel traces and spans | daily.dev
og:description: OpenTelemetry traces and spans are foundational concepts for understanding how requests flow through distributed systems. A trace represents the complete...
og:url: https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi
og:image: https://api.daily.dev/og/posts/pymSPELQi.png
og:image:alt: OpenTelemetry series: Understanding OTel traces and spans
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenTelemetry series: Understanding OTel traces and spans

**[Dynatrace](https://daily.dev/sources/dynatrace)** · 8 min read · 1 upvotes · 1 comments

## Summary

OpenTelemetry traces and spans are foundational concepts for understanding how requests flow through distributed systems. A trace represents the complete end-to-end journey of a single request across multiple services, while spans are the individual units of work that make up a trace. Spans are organized hierarchically into root, parent, child, and sibling spans, each sharing a common trace ID and linked via context propagation through carriers like HTTP headers. Span attributes capture duration, errors, status, and custom metadata, and logs can be correlated directly with spans for richer troubleshooting. The post also touches on how these concepts apply to LLM-based workflows and AI pipelines.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.dynatrace.com/news/blog/opentelemetry-series-understanding-otel-traces-and-spans>

## Questions this post answers

### What is the difference between a trace and a span in OpenTelemetry?

A trace represents the complete end-to-end journey of a single request or transaction as it flows through a distributed system, while a span represents a single unit of work or operation within that journey, such as an internal computation or a call to a payment gateway. Spans are the building blocks of traces, and all spans in a trace share a common trace ID.

_daily.dev surfaces observability deep dives for engineers untangling distributed tracing setups._

### How are parent and child spans related in a distributed trace?

A parent span is any span that creates or triggers other spans during a request, while a child span represents a smaller sub-task with a parent span ID pointing back to the span that initiated it. A root span has no parent ID and marks the entry point of a request, and spans can be nested multiple levels deep to represent granular sub-operations.

_Engineers mapping request flows can track tracing explainers like this on daily.dev._

### How does context propagate across services in OpenTelemetry tracing?

Context, consisting of the trace ID, span ID, and an optional parent ID, propagates across process or service boundaries through carriers such as HTTP headers, gRPC metadata, or message headers, in a process called context propagation. This lets observability tools reconstruct the full path of a request across authentication, fraud checks, payment gateways, and other services.

_daily.dev helps backend engineers keep up with distributed systems and tracing concepts as they build._

## Community discussion

Top comments from developers on daily.dev.

**@kartiknvj** · 0 upvotes

> The span hierarchy with context propagation through carriers is the piece that makes or breaks tracing for LLM pipelines, because a retrieval step, a tool call, and the generation all need to hang off the same trace ID or you lose the causal chain. Where I have seen this get thin is attribute cardinality, since attaching full prompts and output as span attributes gets expensive fast and most backends start sampling them away. Are people modeling each agent step as its own child span, or flattening the whole run into one?

## Similar posts on daily.dev

- [OpenTelemetry Spans Explained: Deconstructing Distributed Tracing](https://daily.dev/posts/opentelemetry-spans-explained-deconstructing-distributed-tracing-nmq42snle) · Last9 · 0 upvotes · 0 comments
- [OpenTelemetry Series: Anatomy of an OTel Span](https://daily.dev/posts/opentelemetry-series-anatomy-of-an-otel-span-x1fksohvw) · Dynatrace · 0 upvotes · 0 comments
- [Layers of Observability in AI Systems](https://daily.dev/posts/layers-of-observability-in-ai-systems-osbbc5eoz) · Daily Dose of Data Science \| Avi Chawla \| Substack · 2 upvotes · 0 comments
- [How OpenTelemetry Works: A Complete Guide](https://daily.dev/posts/how-opentelemetry-works-a-complete-guide-56tcccdpu) · freeCodeCamp · 6 upvotes · 0 comments

---

Tags: [#devops](https://daily.dev/tags/devops), [#observability](https://daily.dev/tags/observability), [#microservices](https://daily.dev/tags/microservices), [#opentelemetry](https://daily.dev/tags/opentelemetry)

[View this post on daily.dev](https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"OpenTelemetry series: Understanding OTel traces and spans","url":"https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi"},"datePublished":"2026-07-28T15:53:04.057Z","dateModified":"2026-09-14T08:47:12.781Z","description":"OpenTelemetry traces and spans are foundational concepts for understanding how requests flow through distributed systems. A trace represents the complete...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/2d1a77777b2a6f4a874409be0c2c4c05?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/2d1a77777b2a6f4a874409be0c2c4c05?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Dynatrace","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Dynatrace","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/3ca5a9897e9748f4a39fa9736389609e","url":"https://daily.dev/sources/dynatrace"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"devops,observability,microservices,opentelemetry","timeRequired":"PT8M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Dynatrace","item":"https://daily.dev/sources/dynatrace"},{"@type":"ListItem","position":3,"name":"OpenTelemetry series: Understanding OTel traces and spans"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi","comment":[{"@type":"Comment","text":"The span hierarchy with context propagation through carriers is the piece that makes or breaks tracing for LLM pipelines, because a retrieval step, a tool call, and the generation all need to hang off the same trace ID or you lose the causal chain. Where I have seen this get thin is attribute cardinality, since attaching full prompts and output as span attributes gets expensive fast and most backends start sampling them away. Are people modeling each agent step as its own child span, or flattening the whole run into one?","datePublished":"2026-07-28T18:48:52.750Z","url":"https://daily.dev/posts/pymSPELQi#c-GkmX96pty","author":{"@type":"Person","name":"kartik-nvjk","url":"https://daily.dev/kartiknvj","image":"https://media.daily.dev/image/upload/s--3gGgsVCw--/f_auto/v1781456774/avatars/avatar_TvTVeiMdkRCqWUDullFmy?_a=BAMAMiWQ0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/opentelemetry-series-understanding-otel-traces-and-spans-pymspelqi#faq","mainEntity":[{"@type":"Question","name":"What is the difference between a trace and a span in OpenTelemetry?","acceptedAnswer":{"@type":"Answer","text":"A trace represents the complete end-to-end journey of a single request or transaction as it flows through a distributed system, while a span represents a single unit of work or operation within that journey, such as an internal computation or a call to a payment gateway. Spans are the building blocks of traces, and all spans in a trace share a common trace ID. daily.dev surfaces observability deep dives for engineers untangling distributed tracing setups."}},{"@type":"Question","name":"How are parent and child spans related in a distributed trace?","acceptedAnswer":{"@type":"Answer","text":"A parent span is any span that creates or triggers other spans during a request, while a child span represents a smaller sub-task with a parent span ID pointing back to the span that initiated it. A root span has no parent ID and marks the entry point of a request, and spans can be nested multiple levels deep to represent granular sub-operations. Engineers mapping request flows can track tracing explainers like this on daily.dev."}},{"@type":"Question","name":"How does context propagate across services in OpenTelemetry tracing?","acceptedAnswer":{"@type":"Answer","text":"Context, consisting of the trace ID, span ID, and an optional parent ID, propagates across process or service boundaries through carriers such as HTTP headers, gRPC metadata, or message headers, in a process called context propagation. This lets observability tools reconstruct the full path of a request across authentication, fraud checks, payment gateways, and other services. daily.dev helps backend engineers keep up with distributed systems and tracing concepts as they build."}}]}
```

