Dashboards

Every part of your app,
already on a dashboard.

Endpoints, database queries, jobs, external APIs, cache, emails, and users each get their own dashboard the moment your app sends data. No panels to build, no queries to write.

Requests

Throughput, errors, P95 per route

Queries

Slowest and costliest patterns

Jobs

Processing time, queue wait, retries

Commands

Ace commands and scheduled tasks

External calls

Every third-party API you call

Cache

Hit rate and latency per key

Emails

Sent, failed, and send time

Users

What each user went through

Every endpoint, with its slow and failing calls

Requests are grouped by route, so GET /users/1 and GET /users/2 both count for GET /users/:id. Sort by volume, errors, or P95 to find the endpoints to work on.

  • 4xx and 5xx responses, average and P95 duration, and last call for each route
  • Requests that match no route are listed apart, so bots and scanners stay out of the way
  • Open an endpoint to see its recent requests with their traces, or set an alert on it

The queries that cost you the most

Every database query is grouped into a pattern. Sort by total time to find what costs the most overall, or by P95 to find the slowest ones.

  • Slow queries above 100 ms and failed queries counted on their own
  • Each execution shows the endpoint or job that ran it, and opens its trace
  • Works with Lucid, Kysely, and Drizzle, and any database instrumentation

Jobs, commands, and the APIs you depend on

Background work and outgoing calls get the same treatment as your endpoints: volume, errors, and duration, down to each run.

  • Jobs: throughput, processing time, time spent waiting in the queue, and retries
  • Ace commands with the arguments and flags of each run
  • External calls grouped by domain and URL pattern, with your own services marked Internal

See what each user went through

When a customer reports a problem, find them by name, email, or ID and see every request they made, the ones that failed, and the latency they got.

  • Call Monocle.setUser() in your auth middleware, and every trace knows its user
  • Active users over time, requests and server errors per user
  • Each request links to its trace, and each issue lists the users it hit

And your own dashboards, when you need them

Put the metrics you care about side by side. Pick a metric, an aggregation, a group by, and filters, and see the preview update as you go.

  • Six widget types on a 12-column grid: time series, stat, sparkline, bars, pie, and table
  • Any OpenTelemetry metric, with up to six queries in the same widget
  • Your AI assistant can create dashboards and add widgets through the Monocle MCP
Works with

Plugs into your stack

Lucid

Queries traced by the AdonisJS agent

Kysely & Drizzle

Every query as a span

BullMQ

Jobs from enqueue to run

boringnode/queue & @adonisjs/queue

Traced out of the box

BentoCache

Hits, misses, and latency per key

@adonisjs/mail

Every email sent, traced

Early access

See what your apps
are really doing.

Traces, logs, errors and metrics for every app you ship. Bring it all into focus.