How this piece came together. A Zenn writing contest put OpenTelemetry back on my radar, and this is the record of learning it by doing — picking it up, hitting confusion, and working through the side-questions with an AI while writing it up. Every command, number, and output shown below was run and confirmed on my own machine.
I touched OpenTelemetry for the first time today. I knew the name; I'd never installed it. This is the record of adding instrumentation to a piece of my own code and seeing what actually showed up.
The short version: the first version of my instrumentation didn't work. All 15 spans arrived cleanly, with the right names and the right attributes, and they lined up in the Jaeger UI exactly as expected. I was about to call it done — until I looked at the actual numbers. The parent span read 1,006 ms. The 15 child spans summed to 0.085 ms.
The missing ~1,000 ms wasn't recorded anywhere. No error, either.
The cause was how I'd written it. I ran the work, then built spans while reading the results that came back. The child spans were timing "how fast the loop that reads results runs," not the checks themselves.






