Spring Boot ยท Quarkus ยท Python ยท OpenTelemetry ยท Grafana LGTM

OpenTelemetry Observability Tutorial

Learn OpenTelemetry with the Grafana LGTM stack by instrumenting the same e-commerce demo across Spring Boot, Quarkus, and Python.

๐Ÿ”ญOne trace across every signal: traces, metrics, logs, baggage, and profiles
๐ŸงฉThe same e-commerce demo built three ways โ€” Spring Boot, Quarkus, and Python
๐Ÿ“ŠCorrelated in Grafana via OpenTelemetry (Tempo + Mimir + Loki)
๐ŸณThe full Grafana LGTM stack, running locally โ€” no managed cloud required

What this tutorial is

If you have run a distributed system, you know the failure mode: a request crosses half a dozen services, and when it is slow or quietly wrong, the logs you have are too sparse to explain it, too noisy to search, or costly enough that you hesitate to add more. The thing that would actually help โ€” the request's full path, in order, across every service, with the time spent in each hop and the cost of serializing data between them โ€” is the thing you almost never have.

This tutorial builds it, three times over. The same small e-commerce domain is instrumented with OpenTelemetry on Spring Boot, Quarkus, and Python, chapter by chapter, until a single request is a trace you can read end to end โ€” with metrics that show it in aggregate and logs that correlate back to the same trace, all in a Grafana stack you run yourself. Every chapter shows the same concept across all three stacks side by side, so you can see what each runtime's instrumentation actually buys you, and what it costs. It stays honest about the trade-offs throughout: what auto-instrumentation gives you for free, where you pay for it in overhead or noise, and when one hand-placed span is worth more than a dozen automatic ones.