Tutorials Microservices & Event-Driven Architecture (EDA) Mastery
Distributed Tracing with OpenTelemetry
On this page
Tracing the Request Flow
In a monolith, you have one log. In microservices, one request might touch 10 services. Without Distributed Tracing, finding the source of a slow response is like looking for a needle in 10 haystacks.
1. OpenTelemetry (The Open Standard)
OpenTelemetry is a vendor-neutral standard for collecting Traces, Metrics, and Logs. .NET has first-class support for it. You can instrument your app once and send the data to **Jaeger**, **Zipkin**, **Honeycomb**, or **Azure Monitor** without changing your code.
2. Spans and Traces
- **Trace:** The entire journey of a request from Start to Finish.
- **Span:** A single unit of work (e.g., a SQL query, a Redis fetch, an HTTP call to another service).
By looking at the "Gantt Chart" of your trace in a tool like Jaeger, you can instantly see: 'Service A spent 500ms waiting for the Database,' or 'Service B spent 1s retrying an API call.'
4. Interview Mastery
Q: "How do you propagate a trace across an asynchronous message queue?"
Architect Answer: "We use **Baggage and Trace Context**. When we publish a message to RabbitMQ, MassTransit automatically adds the `traceparent` and `tracestate` to the message headers. When the consumer reads the message, it starts a new span using those headers as the 'Parent'. This allows the tracing tool to link the Producer's timeline to the Consumer's timeline even though they happened seconds or minutes apart."