Follow every request,
span by span.
Every HTTP request, background job, and Ace command becomes a trace, even when it crosses services. Logs and metrics land right next to it, already connected. Nothing to wire by hand.
From the browser to the API to the worker
Every log line knows its trace
Runtime, library, and custom
CPU, memory, heap, and event loop
Find the request you care about in seconds
One search bar does both search and filtering. Type a field name to pick its values with their counts, or write the filter yourself.
- Filter on any span or resource attribute: duration>=500ms, http.route^/api, service.name!=worker
- Chart segments, P95, or average duration over time, grouped by any field
- Drag across the chart to zoom, preview a trace with the keyboard, open it with Enter
See where it broke, and where the time went
Every span sits on one timeline, nested under its parent. Failed spans are red, and the span where the error started is marked, so you know where to look first.
- The span panel shows the highlighted SQL query, the exception, HTTP bodies, and AI calls
- Across services: network time between calls, and queue wait for jobs
- Clock skew between machines is corrected automatically, and flagged when it is
Logs that know where they came from
Each log keeps the trace and span that were active when it was written. Go from a log line to the full request in one click, and back.
- AdonisJS logger output is sent automatically and linked to the current trace
- See the other logs of the same trace, or of the same service around that moment
- Filter by level, service, or any attribute, and share the view with a link
Metrics, without building panels
Every OpenTelemetry metric your services send is listed and ready to chart: runtime metrics from the agent, metrics from libraries, and your own.
- Sum, rate, average, and P50 to P99 for histograms
- Group by any attribute, like host.name or service.instance.id
- CPU, memory, V8 heap, and event loop per instance, on their own page
Your own spans, when you need them
The AdonisJS agent traces requests, database queries, Redis, outgoing HTTP calls, emails, queue jobs, and Ace commands out of the box. For business logic, wrap it in a span with one helper or a decorator.
- record() handles sync and async callbacks and records exceptions for you
- @span() and @spanAll() decorators for services
- Standard OpenTelemetry under the hood, so any OTel SDK works too
import { record } from '@monocle.sh/adonisjs-agent/helpers'
const report = await record('report.generate', async (span) => {
span.setAttributes({ 'report.type': 'monthly', 'report.userId': userId })
const data = await fetchReportData(userId)
return generatePdf(data)
})Plugs into your stack
AdonisJS
v6 and v7, zero config
Browser SDK
Frontend traces linked to your API
BullMQ & boringnode/queue
Jobs traced from enqueue to run
Drizzle & Kysely
Every query as a span
BentoCache
Cache hits and misses
Any OpenTelemetry SDK
Node.js or any other language
See what your apps
are really doing.
Traces, logs, errors and metrics for every app you ship. Bring it all into focus.
