~/blog/observability-opentelemetryvel.mdgit:(main)$cat post.md
cd ..

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.

~/bloggit:(main)$cd ../ # back to the index
> exit 0© 2026 Péter Tamás Czibula