See where every request spent its time.
Inspect traffic trends, request logs, platform spans, application OpenTelemetry, cold starts, and multiplexed function invocations in one place.
Notice the spike first
Request volume by status for every project, with the busiest and failing routes right underneath. Bandwidth, function errors, and compute have charts of their own.
Find the requests behind it
Filter Logs by status, route, cache result, environment, or deployment. Every request shows whether a function ran, how the cache answered, and what the firewall decided.
- 19:41:57.002[checkout] Creating charge for cart_9f2a
- 19:41:57.984[checkout] Payment provider timed out after 980ms
- 19:41:58.010Responded 502 in 1210ms
Follow one request through the stack
The trace starts at the edge and runs through routing, middleware, and your function. Your OpenTelemetry spans nest inside it, so the slow call stands out.
Debug from your terminal
easel logs streams matching requests as they happen, with the same filters as the dashboard.
$ easel logs --follow --status-code 5xxFollowing production logs for lumen-chat…19:41:58 502 POST /api/checkout 1.21s req_01J8Q4X2KB19:41:55 502 POST /api/checkout 1.19s req_01J8Q4WZ7M19:41:47 502 POST /api/checkout 1.24s req_01J8Q4W9QF
Built into every deployment
Nothing to install before the first request shows up.
OpenTelemetry without a collector
Register
@vercel/otelor the standard SDK. Spans arrive with the request; there is no endpoint to run.Cache status on every request
Each response carries
X-Easel-Cache, and Logs filter by hit, miss, stale, or bypass.Firewall decisions in Logs
Blocked and challenged requests show the action and the rule that matched, next to the rest of your traffic.
Custom queries
Chart any platform metric by route, status, or function, with p75, p90, p95, and p99.
Trace your next preview
Deploy an app, send it some traffic, and open Observability. Add OpenTelemetry to see your own spans inside every request.