Observability with OpenTelemetry
> Logs aren't enough. When a request crosses five services, you debug blind without traces.
dateOct 2, 2025
read8 m · read
tagsOpenTelemetryobservabilityGo
In a monolith, logs are often enough. In microservices, a request crosses five systems, and when something's slow, logs are just guesswork.
##Trace > log
Distributed tracing shows the request's whole path, broken into spans. You see at once that 700ms of the 800 sat on a single slow downstream call.
go
ctx, span := tracer.Start(ctx, "fetchUser")
defer span.End()
span.SetAttributes(attribute.Int("user.id", id))##Don't over-measure
The temptation to instrument everything is real. But too many spans are noise, and they cost money. Measure service boundaries and slow operations, leave the rest.
OpenTelemetry is vendor-neutral, which is why I invested in it: the backend is swappable without rewriting the code.