Tracing
Follow a request through edge routing and function work, and add your own OpenTelemetry spans.
A Trace is the span tree for one request. Easel builds it from platform timing and nests any OpenTelemetry spans your function emits under the function's invoke span. You don't configure an exporter or endpoint.
Open a Trace
- Open Logs and select a request. See Requests.
- Open the Trace tab in the dock.
- Choose Timeline, Tree, or Waterfall.
Timeline places spans on a time axis with zoom and a minimap. Tree shows the hierarchy. Waterfall shows indented labels with duration bars. All three show the same spans. Use Search spans when the tree is large.
Read the spans
Platform spans appear on every Trace:
- A root span for the method and path
- Resolve Deployment and Resolve Route for edge routing
- Invoke middleware and Invoke function for compute
Your application's spans nest under Invoke function. Each span has a kind: Platform, Framework, Fetch, or Custom.
A Trace shows where time went inside one request. Cold starts and billed duration belong to the function wake, so read them on the request details or in Invocations. Each invocation also has its own Trace that shows the wake and a bar for each request it served. See Function observability.
Add application spans
Easel collects OpenTelemetry spans from Node.js functions. The runtime provides
the request context that @vercel/otel and telemetry.reportSpans expect, so
spans buffered during the invoke attach to that request's Trace.
- Install
@vercel/otel, or the OpenTelemetry Node.js SDK and the instrumentation packages for the libraries you use. - Register instrumentation when the server starts. Next.js uses
instrumentation.ts; see Next.js. For other frameworks, register it in the server entry. - Deploy, send a request to an instrumented path, and open its Trace.
Until a function emits spans, the Trace shows platform spans and a note under the invoke span.
Spans are sent as they finish, so a function that crashes mid-request still shows the spans it finished. Work that runs after the response needs to finish within the function's post-response window for its spans to arrive. See Background work.
Span capture per request is bounded, and the Trace marks spans that were truncated. See Observability limits. Spans stay in Easel. There's no export to your own OpenTelemetry backend yet.