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.
Thousands of events, one issue
Resolved issues reopen
Slack, Discord, email, webhooks
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
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
}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
New and regressed issues, per member
See what your apps
are really doing.
Traces, logs, errors and metrics for every app you ship. Bring it all into focus.
