What's captured
Unravel models your application the way a debugger does: as causally linked work, rather than a flat stream of logs.
Traces, spans, events
- A trace is one unit of top-level work: an HTTP request, a queued job, a console command, a scheduled task, or a websocket session.
- A span is a timed operation inside a trace, with a parent and a duration.
- An event is a point-in-time record attached to a span: a query, a cache hit, an outbound call, a log line, an exception.
Everything carries OpenTelemetry-style attributes (http.method, db.system,
and so on), so the model stays compatible with standard tooling.
What the SDK records
- HTTP requests with route, method, status, and duration.
- Database queries with normalized SQL, bindings, and the callsite in your code.
- Queued jobs with their queued, processing, and processed phases.
- Scheduled tasks and console commands, traced like requests.
- Websocket activity (Reverb): connections, channels, subscriptions, frames.
- Cache operations, outbound HTTP, notifications, and logs.
- Exceptions, with the immediate cause attached to the failing trace.
Causality, not log soup
The backend does the interpreting: queries are normalized into fingerprints, N+1 clusters are detected and collapsed, every failed trace carries its immediate cause, and each request links back to what the same user did before it. A queued job keeps the trace of the request that dispatched it, so a checkout and the email it queued stay in one story instead of two log files.
Raw values stay raw
Captured code, paths, SQL, and identifiers are stored verbatim. Unravel never normalizes or rewrites the developer-written text you need to recognize a problem. See Security & privacy for what is transformed.