Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
What Is Observability? How It Differs from Monitoring and the Question Each of Logs, Metrics and Traces Answers
Observability is being able to ask, from the logs, metrics and traces a system emits, a question you had not thought of beforehand; monitoring watches for known failures. We narrow down Bookstore's checkout that sometimes takes 8 seconds with logs, metrics from dotnet-counters and traces, and look at the telemetry pipeline and the cost of cardinality.
Finding the Slow Request with a Trace Backend: Jaeger v2, Grafana Tempo and the N+1 Query in Checkout
Finding the slow request in a trace backend depends on asking the right question: Jaeger v2 searches indexed tags, Tempo uses TraceQL with conditions across spans. We open Bookstore's 7.6-second checkout in the waterfall, find the retry storm and the N+1 query, measure two fixes and hedging, and show why percentiles computed from tail-sampled traces mislead.
What's New in Observability from .NET 8 to .NET 11: IMeterFactory, Gauge, New Built-in Metrics and Built-in Tracing in ASP.NET Core
In .NET 11 ASP.NET Core writes the OpenTelemetry attributes of the HTTP server span itself and MemoryCache publishes dotnet.cache.* metrics, with no instrumentation package. We map the releases from .NET 8's IMeterFactory and .NET 9's Gauge to .NET 10's Identity metrics and schema URLs, run the .NET 11 items on the GA SDK and give tips for reading older code.