sentry-ruby-sdk
Original:🇺🇸 English
Not Translated
Full Sentry SDK setup for Ruby. Use when asked to add Sentry to Ruby, install sentry-ruby, setup Sentry in Rails/Sinatra/Rack, or configure error monitoring, tracing, logging, metrics, profiling, or crons for Ruby applications. Also handles migration from AppSignal, Honeybadger, Bugsnag, Rollbar, or Airbrake. Supports Rails, Sinatra, Rack, Sidekiq, and Resque.
2installs
Sourcegetsentry/agent-skills
Added on
NPX Install
npx skill4agent add getsentry/agent-skills sentry-ruby-sdkSKILL.md Content
Sentry Ruby SDK
Opinionated wizard that scans the project and guides through complete Sentry setup.
Invoke This Skill When
- User asks to "add Sentry to Ruby" or "set up Sentry" in a Ruby app
- User wants error monitoring, tracing, logging, metrics, profiling, or crons in Ruby
- User mentions ,
sentry-ruby, or the Ruby Sentry SDKsentry-rails - User is migrating from AppSignal, Honeybadger, Bugsnag, Rollbar, or Airbrake to Sentry
- User wants to monitor exceptions, HTTP requests, or background jobs in Rails/Sinatra
Note: SDK APIs below reflect sentry-ruby v6.4.0. Always verify against docs.sentry.io/platforms/ruby/ before implementing.
Phase 1: Detect
bash
# Existing Sentry gems
grep -i sentry Gemfile 2>/dev/null
# Framework
grep -iE '\brails\b|\bsinatra\b' Gemfile 2>/dev/null
# Web server — Puma triggers queue time guidance
grep -iE '\bpuma\b' Gemfile 2>/dev/null
# Background jobs
grep -iE '\bsidekiq\b|\bresque\b|\bdelayed_job\b' Gemfile 2>/dev/null
# Competitor monitoring tools — triggers migration path if found
grep -iE '\bappsignal\b|\bhoneybadger\b|\bbugsnag\b|\brollbar\b|\bairbrake\b' Gemfile 2>/dev/null
# Scheduled jobs — triggers Crons recommendation
grep -iE '\bsidekiq-cron\b|\bclockwork\b|\bwhenever\b|\brufus-scheduler\b' Gemfile 2>/dev/null
grep -rn "Sidekiq::Cron\|Clockwork\|every.*do" config/ lib/ --include="*.rb" 2>/dev/null | head -10
# OpenTelemetry tracing — check for SDK + instrumentations
grep -iE '\bopentelemetry-sdk\b|\bopentelemetry-instrumentation\b' Gemfile 2>/dev/null
grep -rn "OpenTelemetry::SDK\.configure\|\.use_all\|\.in_span" config/ lib/ app/ --include="*.rb" 2>/dev/null | head -5
# OpenTelemetry logging — check for logs SDK (much less common in Ruby)
grep -iE '\bopentelemetry-logs-sdk\b|\bopentelemetry-logs-api\b' Gemfile 2>/dev/null
grep -rn "OpenTelemetry::Logs" config/ lib/ app/ --include="*.rb" 2>/dev/null | head -5
# Existing metric patterns (StatsD, Datadog, Prometheus)
grep -rE "(statsd|dogstatsd|prometheus|\.gauge|\.histogram|\.increment|\.timing)" \
app/ lib/ --include="*.rb" 2>/dev/null | grep -v "_spec\|_test" | head -20
# Companion frontend
cat package.json frontend/package.json web/package.json 2>/dev/null | grep -E '"@sentry|"sentry-'Route from what you find:
- Competitor detected (,
appsignal,honeybadger,bugsnag,rollbar) → loadairbrakefirst; delete the competitor initializer as part of migration${SKILL_ROOT}/references/migration.md - Sentry already present → skip to Phase 2 to configure features
- Rails → use +
sentry-railsconfig/initializers/sentry.rb - Rack/Sinatra → +
sentry-rubymiddlewareSentry::Rack::CaptureExceptions - Sidekiq → add ; recommend Metrics if existing metric patterns found
sentry-sidekiq - Puma detected → queue time capture is automatic (v6.4.0+), but the reverse proxy must set header; see
X-Request-Start→ "Request Queue Time"${SKILL_ROOT}/references/tracing.md - OTel tracing detected (+ instrumentations in Gemfile, or
opentelemetry-sdkin source) → use OTLP path:OpenTelemetry::SDK.configure; do not setconfig.otlp.enabled = true; Sentry links errors to OTel traces automaticallytraces_sample_rate - OTel logging detected (in Gemfile, or
opentelemetry-logs-sdkin source) → skipOpenTelemetry::Logs; OTel handles log exportenable_logs - OTel tracing present but NOT logging (the common case) → use OTLP for tracing and Sentry native for logging
enable_logs: true
Phase 2: Recommend
Lead with a concrete proposal — don't ask open-ended questions:
| Feature | Recommend when... |
|---|---|
| Error Monitoring | Always |
| OTLP Integration | OTel tracing detected — replaces native Tracing |
| Tracing | Rails / Sinatra / Rack / any HTTP framework; skip if OTel tracing detected |
| Logging | Always — |
| Metrics | Sidekiq present; existing metric lib (StatsD, Prometheus) detected |
| Profiling | ⚠️ Beta — performance profiling requested; requires |
| Crons | Scheduled jobs detected (ActiveJob, Sidekiq-Cron, Clockwork, Whenever) |
OTel tracing + no OTel logging (the common case): "I see OpenTelemetry tracing in the project. I recommend Sentry's OTLP integration for tracing (via your existing OTel setup) + Error Monitoring + Sentry Logging [+ Metrics/Crons if applicable]. Shall I proceed?"
OTel tracing + OTel logging: "I see OpenTelemetry handling both tracing and logging. I recommend Sentry's OTLP integration + Error Monitoring [+ Metrics/Crons if applicable]. Shall I proceed?"
No OTel: "I recommend Error Monitoring + Tracing + Logging [+ Metrics if applicable]. Shall I proceed?"
Phase 3: Guide
Install
Rails:
ruby
# Gemfile
gem "sentry-ruby"
gem "sentry-rails"
gem "sentry-sidekiq" # if using Sidekiq
gem "sentry-resque" # if using Resque
gem "sentry-delayed_job" # if using DelayedJobRack / Sinatra / plain Ruby:
ruby
gem "sentry-ruby"Run .
bundle installFramework Integration
| Framework / Runtime | Gem | Init location | Auto-instruments |
|---|---|---|---|
| Rails | | | Controllers, ActiveRecord, ActiveJob, ActionMailer |
| Rack / Sinatra | | Top of | Requests (via |
| Sidekiq | | Sentry initializer or Sidekiq config | Worker execution → transactions |
| Resque | | Sentry initializer | Worker execution → transactions |
| DelayedJob | | Sentry initializer | Job execution → transactions |
Init — Rails (config/initializers/sentry.rb
)
config/initializers/sentry.rbruby
Sentry.init do |config|
config.dsn = ENV["SENTRY_DSN"]
config.spotlight = Rails.env.development? # local Spotlight UI; no DSN needed in dev
config.breadcrumbs_logger = [:active_support_logger, :http_logger]
config.send_default_pii = true
config.traces_sample_rate = 1.0 # lower to 0.05–0.2 in production
config.enable_logs = true
# Metrics on by default; disable with: config.enable_metrics = false
endsentry-railsInit — Rack / Sinatra
ruby
require "sentry-ruby"
Sentry.init do |config|
config.dsn = ENV["SENTRY_DSN"]
config.spotlight = ENV["RACK_ENV"] == "development"
config.breadcrumbs_logger = [:sentry_logger, :http_logger]
config.send_default_pii = true
config.traces_sample_rate = 1.0
config.enable_logs = true
end
use Sentry::Rack::CaptureExceptions # in config.ru, before app middlewareInit — Sidekiq standalone
ruby
require "sentry-ruby"
require "sentry-sidekiq"
Sentry.init do |config|
config.dsn = ENV["SENTRY_DSN"]
config.spotlight = ENV.fetch("RAILS_ENV", "development") == "development"
config.breadcrumbs_logger = [:sentry_logger]
config.traces_sample_rate = 1.0
config.enable_logs = true
endEnvironment variables
bash
SENTRY_DSN=https://xxx@oYYY.ingest.sentry.io/ZZZ
SENTRY_ENVIRONMENT=production # overrides RAILS_ENV / RACK_ENV
SENTRY_RELEASE=my-app@1.0.0Feature reference files
Walk through features one at a time. Load the reference file for each, follow its steps, and verify before moving to the next:
| Feature | Reference file | Load when... |
|---|---|---|
| Migration | | Competitor gem found — load before installing Sentry |
| Error Monitoring | | Always |
| Tracing | | HTTP handlers / distributed tracing |
| Logging | | Structured log capture |
| Metrics | | Sidekiq present; existing metric patterns |
| Profiling | | Performance profiling requested (beta) |
| Crons | | Scheduled jobs detected or requested |
For each feature: , follow steps exactly, verify it works.
Read ${SKILL_ROOT}/references/<feature>.mdConfiguration Reference
Key Sentry.init
Options
Sentry.init| Option | Type | Default | Purpose |
|---|---|---|---|
| String | | SDK disabled if empty; env: |
| String | | e.g., |
| String | | e.g., |
| Boolean | | Send events to Spotlight sidecar (local dev, no DSN needed) |
| Boolean | | Include IP addresses and request headers |
| Float | | Error event sample rate (0.0–1.0) |
| Float | | Transaction sample rate; |
| Float | | Profiling rate relative to |
| Boolean | | Enable Sentry structured Logs |
| Boolean | | Enable custom metrics (on by default) |
| Array | | Loggers for automatic breadcrumbs (see logging reference) |
| Integer | | Max breadcrumbs per event |
| Boolean | | Verbose SDK output to stdout |
| Boolean | | Record request queue time from |
| Boolean | | Route OTel spans to Sentry via OTLP; do not combine with |
| Lambda | | Mutate or drop error events before sending |
| Lambda | | Mutate or drop transaction events before sending |
| Lambda | | Mutate or drop log events before sending |
Environment Variables
| Variable | Maps to | Purpose |
|---|---|---|
| | Data Source Name |
| | App version (e.g., |
| | Deployment environment |
Options set in override environment variables.
Sentry.initVerification
Local dev (no DSN needed) — Spotlight:
bash
npx @spotlightjs/spotlight # browser UI at http://localhost:8969
# or stream events to terminal:
npx @spotlightjs/spotlight tail traces --format jsonconfig.spotlight = Rails.env.development?With a real DSN:
ruby
Sentry.capture_message("Sentry Ruby SDK test")Nothing appears? Set and check stdout. Verify DSN format: .
config.debug = truehttps://<key>@o<org>.ingest.sentry.io/<project>Phase 4: Cross-Link
bash
cat package.json frontend/package.json web/package.json 2>/dev/null | grep -E '"@sentry|"sentry-'| Frontend detected | Suggest |
|---|---|
| React / Next.js | |
| Svelte / SvelteKit | |
| Vue | |
For trace stitching between Ruby backend and JS frontend, see → "Frontend trace stitching".
references/tracing.mdTroubleshooting
| Issue | Solution |
|---|---|
| Events not appearing | |
| Rails exceptions missing | Must use |
| No traces (native) | Set |
| No traces (OTLP) | Verify |
| Sidekiq jobs not traced | Add |
| Missing request context | Set |
| Logs not appearing | Set |
| Metrics not appearing | Check |
| Events lost on shutdown | |
| Forking server loses events | Puma/Unicorn fork workers — re-initialize in |
| DSN rejected / events not delivered | Verify DSN format: |