Built for Rails.
Every feature.
Not a generic APM with a Rails plugin bolted on. Every feature is designed around how Rails actually works — its request lifecycle, ActiveRecord patterns, job queues, and more.
Catch the silent
performance killer
N+1 queries are the most common performance issue in Rails apps, and the hardest to spot in code review. DeadBro detects them automatically at runtime — no configuration, no Bullet gem, no manual log parsing.
When a request triggers repeated database queries inside a loop — User.find(id) called 47 times instead of a single where(id:) — DeadBro flags it, links it to the exact controller action, and shows you the repeated SQL.
- ✓Real-time N+1 detection across all controller actions and background jobs
- ✓Full SQL query text with count of repeated executions per request
- ✓Traces linked to exact controller#action and file line number
- ✓Threshold configuration — only alert above N occurrences
- ✓Works with ActiveRecord, Sequel, and raw SQL patterns
- ✓Historical trend: are your N+1s getting worse or better over time?
01 Hidden in views & serializers
Most N+1s don't live in the controller — they hide in _post.html.erb partials, JSON serializers, and helper methods. DeadBro follows the trace through the view layer, so you land on the exact line firing repeated queries — not just the action that rendered it.
02 Background jobs too
N+1 queries don't only happen in web requests. DeadBro instruments Sidekiq, Delayed::Job, and ActiveJob workers with the same depth as web requests.
03 Verify the fix in real time
Push your includes() patch and watch the query count drop on the same endpoint within seconds. No more deploying hopefully and waiting for tomorrow's P99 chart to confirm the regression is gone.
Know before
your users do
Full Rails exception capture across your entire stack — web requests, background jobs, Action Mailer, ActiveRecord callbacks, and more. Every error ships with a full stack trace, request context, session data, and the user who experienced it.
DeadBro groups similar errors intelligently — so a bug in a shared helper that fires 500 times doesn't flood your inbox with 500 duplicate alerts. You see one alert, with an occurrence count that updates in real time.
- ✓Automatic exception capture — no manual rescue blocks needed
- ✓Full Rails stack trace with source code context per frame
- ✓Request environment: params, headers, session, cookies
- ✓User identity attached to each error occurrence
- ✓Smart error grouping and deduplication by fingerprint
- ✓First seen / last seen / occurrence frequency per error
- ✓Slack and email alerts with configurable severity routing
- ✓Mark errors as resolved — auto-reopen if they recur
app/controllers/application_controller.rb:44
app/controllers/posts_controller.rb:32:in `index'
01 Smart grouping
Errors are fingerprinted by exception class, message pattern, and stack frame — not just by message string. Errors that should be grouped together, are.
02 Resolve & reopen
Mark an error as resolved after a deploy. If the same error fires again in a future release, DeadBro automatically reopens it and re-alerts you.
03 Job-aware tracking
Sidekiq job failures include the job class, arguments, queue name, retry count, and full backtrace — everything you need to reproduce and fix the issue.
Deep visibility into
every millisecond
Beyond simple response times — DeadBro breaks down exactly where your Rails requests spend their time. Database time, view rendering, cache hits and misses, external HTTP calls, background jobs. See the full picture.
Every request is sampled and stored with a full breakdown. You can drill into any individual request trace to see a waterfall of every query, cache call, and render that made it up.
- ✓P50, P95, P99 response time tracking per endpoint
- ✓SQL query breakdown — total time, query count, slowest queries
- ✓Cache hit/miss ratio per cache store and key pattern
- ✓Memory usage over time — heap growth, GC pressure, object allocations
- ✓External HTTP call tracking (Faraday, Net::HTTP, HTTParty)
- ✓Slowest endpoints ranked by cumulative impact, not just max latency
- ✓Side-by-side deploy comparison — did performance improve after that PR?
01 Deploy markers
Every deploy is automatically marked on your performance timeline. Immediately see whether a new release improved or regressed your P99 response times.
02 Memory profiling
Track heap size, object allocation count, and GC runs over time. Spot memory leaks before they become OOM kills — especially important on Heroku and Fly.io.
03 Side-by-side request comparison
Pin any two requests next to each other — a fast one and a slow one on the same endpoint — and diff their SQL timing, query count, cache ratio, and view render breakdown row by row. Pinpoint exactly where the slow request lost its seconds.
Three alert streams.
Routed where they belong.
Not every spike deserves a 3 AM wake-up. DeadBro splits alerts into three streams — each routed to the channel that fits its urgency — so your team chat, your inbox, and your phone each get the right level of noise.
Different thresholds, severities, and time windows per stream. Different rules per environment, so staging noise doesn't drown out production signals.
- ✓APM & error alerts — new exceptions, error rate spikes, slow endpoints, and weekly N+1 digests, delivered to Slack and email
- ✓Server monitoring alerts — CPU, memory, disk, and queue depth thresholds sent straight to your phone via Pushover
- ✓Uptime alerts — the moment a check goes down (email and Pushover), plus an auto-recovery ping when it comes back
- ✓Threshold-based rules: P99 > Xms, error rate > Y%, memory > Z%, custom time windows
- ✓Alert fatigue prevention — deduplication, cooldown periods, and per-rule rate limits
- ✓Scheduled maintenance windows — suppress alerts during deploys
- ✓Per-environment overrides — staging never pages, production always does
Track activity,
not identities
When a customer says "the app is slow for me," you shouldn't have to guess — and we shouldn't have to know who they are. DeadBro groups every request, error, and N+1 against an opaque user ID, so you can pull up an entire day of their traffic in one view.
The ID is picked up automatically from Warden — the same layer Devise, Sorcery, and most Rails auth gems sit on top of. No user_context lambda to write, no email or name leaving your app.
- ✓All requests for a given user, grouped by day — open a date and drill into their slowest one
- ✓Errors filtered by user ID — every exception a specific person hit, in order
- ✓Per-user performance — find the customer whose requests are 5× slower than your average
- ✓Zero configuration — Warden-aware out of the box, works with Devise and most Rails auth gems
- ✓Anonymized on our side — we store an opaque user ID, never an email, name, or other PII
- ✓Automatic scrubbing of passwords, tokens, and card numbers from params and headers
- ✓GDPR-friendly retention with per-user deletion via the API
| USER ID | REQUESTS | AVG | ERRORS | LAST SEEN |
|---|---|---|---|---|
| #user_4821 | 142 | 182ms | 2 | 11m ago |
| #user_12087 | 47 | 1,247ms | 0 | 23m ago |
| #user_874 | 318 | 244ms | 0 | 4m ago |
| #user_29413 | 89 | 3,812ms | 7 | 1h ago |
| #user_5610 | 23 | 198ms | 0 | 2h ago |
Production, staging,
all in one place
One DeadBro account covers all your environments. Each environment gets its own dashboard, its own alert rules, and its own data retention policy. No cross-contamination. No guessing which environment a trace came from.
DeadBro auto-detects your Rails environment via RAILS_ENV and segments all data accordingly. Staging noise stays in staging. Production data is always front and center.
- ✓Unlimited environments per account (prod, staging, review apps, dev)
- ✓Auto-detection via RAILS_ENV — no configuration needed
- ✓Per-environment alert rules — staging won't page your on-call
- ✓Side-by-side performance comparison across environments
- ✓Review app support for Heroku and Render preview environments
- ✓Per-environment data retention settings to control storage costs
Ready to see your app clearly?
Add gem 'dead_bro', an initializer with your API key, and get full observability in a few minutes.
No credit card. No enterprise sales call. Gem, initializer, GO!