# Ruby Error and Performance Monitoring

> Use Sentry's Ruby performance & error monitoring to resolve performance issues across your entire stack. Discover how to get started for free today.

**URL:** https://sentry.io/for/ruby/

---

**Documentation:** [https://docs.sentry.io/platforms/ruby/](https://docs.sentry.io/platforms/ruby/)

## Install

### Ruby

Add the `sentry-ruby` gem to your Gemfile:

```ruby
gem "sentry-ruby"
```

Configure your SDK:

```ruby
Sentry.init do |config|
  config.dsn = 'https://<key>@sentry.io/<project>'
  config.traces_sample_rate = 1.0
end
```

See the [Ruby docs](https://docs.sentry.io/platforms/ruby/) for full setup options.

### Rails

Add `sentry-ruby` and `sentry-rails` to your `Gemfile`:

```ruby
gem "sentry-ruby"
gem "sentry-rails"
```

Initialize the SDK within your `config/initializers/sentry.rb`:

```ruby
Sentry.init do |config|
  config.dsn = 'https://<key>@sentry.io/<project>'
  config.breadcrumbs_logger = [:active_support_logger, :http_logger]

  # Set traces_sample_rate to 1.0 to capture 100%
  # of transactions for tracing.
  # We recommend adjusting this value in production.
  config.traces_sample_rate = 1.0
end
```

See the [Rails docs](https://docs.sentry.io/platforms/ruby/guides/rails/) for full setup options.

### Sinatra

Add the [Sentry Ruby SDK](https://github.com/getsentry/sentry-ruby) to your Gemfile:

```ruby
gem "sentry-ruby"
```

Initialize the SDK before requiring Sinatra, then add the Rack middleware:

```ruby
require 'sentry-ruby'

Sentry.init do |config|
  config.dsn = 'https://<key>@sentry.io/<project>'
  config.breadcrumbs_logger = [:sentry_logger, :http_logger]

  # Set traces_sample_rate to 1.0 to capture 100%
  # of transactions for tracing.
  # We recommend adjusting this value in production.
  config.traces_sample_rate = 1.0
end

require 'sinatra'
use Sentry::Rack::CaptureExceptions
```

See the [Sinatra docs](https://docs.sentry.io/platforms/ruby/guides/rack/) for full setup options.

## Features

### Ruby Performance Monitoring

Quickly identify Ruby [performance](/product/tracing/) issues and view the full end-to-end distributed trace to see the exact, poor-performing API call and surface any related errors.

### Ruby Monitoring with Complete Stack Traces

Take advantage of built-in integrations with Rails, Sidekiq, DelayedJob, and more of your favorite RubyGems. Events are sent asynchronously by a background worker, so reporting never blocks your requests. Filter and group Ruby exceptions intuitively to eliminate noise.

### Fill In The Blanks About Ruby Errors

Expose important events that led to each Ruby exception: a string to label where the event took place, message, timestamp. Learn in which version a bug first appeared, merge duplicates, and know if things regress in a future release.

## FAQ

**What is the difference between Sentry and traditional logging?**

Traditional logging provides you with a trail of events. Some of those events are errors, but many times they're simply informational. Sentry is fundamentally different because we focus on exceptions, or in other words, we capture application crashes. We discuss in more detail [here](/vs/logging/) and on our [blog](https://blog.sentry.io/lets-get-ready-to-monitor/).

**What  languages does Sentry support?**

Sentry supports every major  language, framework, and library. You can browse each of them [here](/platforms/).

**How much does Sentry cost?**

You can get started for free. Pricing depends on the number of monthly events, transactions, and attachments that you send Sentry. For more details, visit our [pricing page](/pricing/).

**How does Sentry impact the performance of my app?**

Sentry doesn't impact a web site's performance.

If you look at the configuration options for when you initialize Sentry in your code, you'll see there's nothing regarding minimizing its impact on your app's performance. This is because our team of SDK engineers already developed Sentry with this in mind.

Sentry is a listener/handler for errors that asynchronously sends out the error/event to Sentry.io. This is non-blocking. The error/event only goes out if this is an error.

Global handlers have almost no impact as well, as they are native APIs provided by the browsers.

---

*Source: [sentry.io/for/ruby/](https://sentry.io/for/ruby/)*
