Error tracking

From exception
to fix, in one flow.

Monocle groups every exception into an issue with its stack trace, the request that failed, and the users it hit. Triage it, ship the fix, and know right away if it comes back.

Smart grouping

Thousands of events, one issue

Regression detection

Resolved issues reopen

Notifications

Slack, Discord, email, webhooks

Linear & GitHub

Two-way status sync

Thousands of events, one issue

Monocle fingerprints each exception so the same bug always lands in the same issue, even when its message contains IDs, dates, or emails.

  • Grouped on the exception type and the top frames of your own code
  • Frames from node_modules are ignored, so a library upgrade does not split your issues
  • Each issue shows its trend, events, affected users, and the services that reported it

Everything you need to reproduce it

Monocle opens the best documented occurrence first: the one with source code, a trace still available, and an identified user.

  • Stack trace with the surrounding source code, your own frames marked In app
  • The full trace of the request, job, or command that failed
  • Exceptions from other services in the same trace, with a link to their issue

Notifications that do not flood you

New and regressed issues reach the right people, once. Route them per service and environment, and act on them without leaving Slack or Discord.

  • Slack and Discord get one message per issue, with buttons to resolve, archive, and assign
  • Email and webhooks collect issues for 60 seconds and send one summary
  • Exception rules per service and environment: the most specific one wins

Capture what the handler does not see

Errors reported by your AdonisJS exception handler are captured automatically, with the current user attached. Capture your own when you want more context.

  • Attach the user, tags, and extra data to any exception
  • Uncaught errors from the browser SDK land in the same issues
  • Exceptions recorded on spans by any OpenTelemetry SDK are picked up too
app/services/payment_service.ts
import { Monocle } from '@monocle.sh/adonisjs-agent'

try {
  await processPayment(order)
} catch (error) {
  Monocle.captureException(error, {
    tags: { component: 'payment' },
    extra: { orderId: order.id, amount: order.total },
  })
  throw error
}
Works with

Plugs into your stack

Linear

Create or link a ticket, resolved when it closes

GitHub

Create or link an issue, resolved when it closes

Slack

Resolve, archive, and assign from the message

Discord

Resolve, archive, and assign from the message

Webhooks

Signed JSON events to your own endpoints

Email

New and regressed issues, per member

Early access

See what your apps
are really doing.

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