Trace — это полный путь запроса через систему, идентифицируемый trace ID. Span — одна операция внутри trace: HTTP-запрос, SQL-запрос, вызов функции. У span есть имя, время начала и конца, атрибуты (key-value), статус и parent span ID. Spans образуют дерево: root span — это входной запрос, child spans — вложенные операции. В Go создаёшь span через ctx, span := tracer.Start(ctx, "name"), передаёшь ctx дальше, в конце span.End(). Визуально это waterfall-диаграмма, где видно, что и сколько длилось.