Latency and clock accuracy¶
Percentiles are computed over eligible spans only¶
Stream lifetimes and awaiting-input rounds are excluded at write time, not at query time, so a reader cannot forget to exclude them.
When a percentile is not a percentile¶
OpenTelemetry timestamps spans using the host clock. On Linux that is nanosecond-grade. On Windows the default timer granularity can be around half a millisecond, which is the same order as a fast tool call — so the "percentiles" become a histogram of clock ticks rather than of latency.
We measure the actual tick on your host rather than assuming one, and the console marks every percentile it cannot support:
clock ticks every 0.509ms — p50 is within 10× of that, so these percentiles are quantisation, not latency
Two independent checks, because neither subsumes the other:
- A p50 within 10× of the observed tick is quantisation noise, however few zero-duration samples there are.
- A p50 comfortably above the tick still misleads when most samples measured exactly zero, because the surviving non-zero samples are a biased tail.
If you see this caveat
Your numbers are not wrong so much as under-resolved. Tool calls that do real work — a database query, an outbound API call — measure fine on any host. It is sub-millisecond in-process tools that a coarse clock cannot resolve.
Freshness¶
The console shows ingest lag: how long a span takes to travel from happening in your server to being queryable. Under a minute is healthy. It is displayed rather than assumed, so you always know how current the numbers you are reading actually are.