Head-based sampling decides before the request runs, so the eight-second outlier is in the sample only by luck.
1% head-based cheap. and the slow request is
almost certainly not sampled.
tail-based decide AFTER: keep every error and
everything over 2s. requires buffering
spans until the trace completes —
which is a collector, and memory.
what shipped: 1% baseline, 100% on two routes, and a
forced trace on a debug header.
Tail-based sampling is the correct answer and needs infrastructure that a modest system will not have in 2021, since the OpenTelemetry collector is still young and the PHP instrumentation is pre-1.0. The compromise covers the investigations that actually happen: complete coverage on the two routes that matter, and a way to force a trace when reproducing something. The baseline exists for aggregate questions rather than for debugging.